使用LINQ修改属性值

时间:2018-01-19 09:49:43

标签: c# linq foreach where

我有以下课程:

public class QualifyResponse
{
    public Message[] MessageList{get; set;}
}

public class Message 
{
    public MessageDetail[] MessageDetailList{get; set;}
    public string MessageStatus{get; set;}
    public string ProviderCode{get; set;}
}

public partial class MessageDetail 
{
    public string MessageCategory{get; set;}
    public string MessageCode{get; set;}
    public string MessageSeverity{get; set;}
    public string MessageText{get; set;}
}

我想要的是,对于所有MessageDetailList,如果messageCode等于“status”,则在此查询后将其messageText值指定为“Complete”

我尝试了以下LINQ,但它没有工作,即具有MessageCode =“status”的MessageDetailList对象没有MessageText =“Complete”。

response.MessageList.FirstOrDefault()
                    .MessageDetailList
                    .Where(message => message.MessageCode
                                             .ToLower()
                                             .Equals("status"))
                    .ToList()
                    .ForEach(status => 
                                { 
                                    status.MessageText = "Complete"; 
                                });

我做错了什么?

1 个答案:

答案 0 :(得分:0)

一些格式化有助于阅读您的代码

然而,这应该有助于并仔细检查结果

  

请注意,如果您的Where条款正确,更新您的   MessageText提供没有一些时髦的二传手

var message = response.MessageList.FirstOrDefault();
var messageDetails = message.MessageDetailList
                            .Where(message => message.MessageCode.ToLower() == "status")
                            .ToList();

messageDetails.ForEach(status => status.MessageText = "Complete");

messageDetails.ForEach(status => Debug.WriteLine(status.MessageText));

更新

这一切都应该可以正常工作

  1. 尝试foreach而不是
  2. 尝试一下试试吧
  3. 设置后立即尝试检查结果。
  4. 如果这是来自Ef尝试`SaveChanges'
  5. 我们不知道您如何检查结果