【问题标题】:How to do Linq query update如何进行 Linq 查询更新
【发布时间】:2018-01-04 00:48:09
【问题描述】:

我有以下方法返回两个实体的数据。

public List<Object> GetDados()
{
    var sendFilter = new Filter<MessageSent>();
    //employeeFilter.Add(x => x.Name, name);
    sendFilter.Add(x => x.MessageSentSeq, ID_GROUP_SEND);
    // You can add more filters

    MessageSentService svc = new MessageSentService();
    var messages = svc.Find(sendFilter).ToList();

    var employees = new EmployeeService().GetAll();

    var query =
        from employee in employees
        join message in messages
        on employee.EmployeeId equals message.EmployeeId
        select new
        {
            MessageSentId = message.MessageSentId,
            //EmployeeId = message.EmployeeId,
            //MessageSentSeq = message.MessageSentSeq,
            Name = employee.Name,
            Surname = employee.Surname,
            Mobile = employee.Mobile,
            Email = employee.Email,
            Status = "N"
        };
    return query.ToList<Object>();
}

打电话

ILog log = LogManager.GetLogger(typeof(Form));
List<Object> Send;

Send = GetDados();
gvSent.DataSource = Send;

在发送时,我想更新 object var query 内部的记录,该记录又会填充我的网格

我需要在使用正确发送的项目更新数据库的所有内容的末尾设置status 字段和S

【问题讨论】:

  • 您使用的是哪个 LINQ 提供程序? LINQ 只是一种用于查询可枚举的技术,与修改数据库记录没有任何关系。你在使用 LINQ to SQL 吗?实体框架?还有什么?
  • @Jacob 是的,我明白这一点并咨询,我还在学习!我正在将 Sqlite 与实体一起使用。只是想知道我是否可以更改通过 Linq 检索到的列表中的某个字段?

标签: c# entity-framework linq lambda


【解决方案1】:

因为您的函数返回List&lt;Object&gt;,所以如果不使用反射或其他一些极端措施,您将无法修改这些属性。如果您计划将此数据修改为可修改,则需要确保您返回的数据已输入。首先定义一个简单的类:

class Dado
{
    public string MessageSentId { get; set; }
    public string Name { get; set; }
    public string Surname { get; set; }
    public bool Mobile { get; set; }
    public string Email { get; set; }
    public string Status { get; set; }
}

...然后修改您的函数以返回此类型的实例:

public List<Dado> GetDados()
{
    var sendFilter = new Filter<MessageSent>();
    //employeeFilter.Add(x => x.Name, name);
    sendFilter.Add(x => x.MessageSentSeq, ID_GROUP_SEND);
    // You can add more filters

    MessageSentService svc = new MessageSentService();
    var messages = svc.Find(sendFilter).ToList();

    var employees = new EmployeeService().GetAll();

    return (
        from employee in employees
        join message in messages
        on employee.EmployeeId equals message.EmployeeId
        select new Dado
        {
            MessageSentId = message.MessageSentId,
            //EmployeeId = message.EmployeeId,
            //MessageSentSeq = message.MessageSentSeq,
            Name = employee.Name,
            Surname = employee.Surname,
            Mobile = employee.Mobile,
            Email = employee.Email,
            Status = "N"
        }
    ).ToList();
}

现在,在您的代码中填充网格后可以执行以下操作:

foreach (var dado in Send) {
    dado.Status = "S";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 2021-05-01
    • 2019-09-16
    相关资源
    最近更新 更多