无法将Lambda表达式转换为C#中的预期委托类型

时间:2018-10-05 09:31:24

标签: c#

我有一个聊天课。在聊天类中是一个ChatMessage列表,在ChatMessage类中有一个ChatHistory类。我的要求是获取ChatHistory集合。当我尝试像下面提到的代码一样显示时,“无法将lambda表达式转换为预期的委托类型” 。请提出任何建议以解决此问题,我已经引用了很多答案,但它不符合我的要求

foreach (var textMessage in store.Chat.Where(s => s.ChatMessage.Where(a => a.ChatHistory.Count > 0 && a.IsDeleted == false)).ToList())

Chat.cs

List<ChatMessage> ChatMessage = new List<ChatMessage>();

ChatMessage.cs

List<ChatHistory> ChatHistory = new List<ChatHistory>();

ChatHistory.cs

public string ID { get; set; }

2 个答案:

答案 0 :(得分:1)

首先,这里很难(或不能)对单个变量在Where内使用Where,而不是可以在Any内使用Where给您您的输出。

通过使用SelectMany,您可以获得所有ChatHistory

foreach (var textMessage in store.Chat.Where(s => s.ChatMessage.Any(a => a.ChatHistory.Count > 0 && a.IsDeleted == false)).SelectMany(x => x.ChatMessage).ToList())
{
    var chatHistory = textMessage.ChatHistory.Where(b => b.ID == "SomeId");
}

答案 1 :(得分:0)

此代码:

s.ChatMessage.Where(a => a.ChatHistory.Count > 0 && a.IsDeleted == false)

将返回IEnumerable,但我们需要一个布尔值。

您可能想使用.Any()而不是.Where()

foreach (
    var textMessage in store.Chat.Where(
        s => s.ChatMessage.Any(
            a => a.ChatHistory.Count > 0 && a.IsDeleted == false
        )
    ).ToList()
)