我有一个聊天课。在聊天类中是一个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; }
答案 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()
)