LINQ:GROUPBY+Where in子句
我正在尝试实现一个T-SQL等价于where in select。。。LINQ中的代码 这就是我现在拥有的:LINQ:GROUPBY+Where in子句,linq,linq-to-sql,Linq,Linq To Sql,我正在尝试实现一个T-SQL等价于where in select。。。LINQ中的代码 这就是我现在拥有的: int contactID = GetContactID(); IEnumerable<string> threadList = (from s in pdc.Messages where s.ContactID == contactID group 1 by
int contactID = GetContactID();
IEnumerable<string> threadList = (from s in pdc.Messages
where s.ContactID == contactID
group 1 by new { s.ThreadID } into d
select new { ThreadID = d.Key.ThreadID}).ToList<string>();
var result = from s in pdc.Messages
where threadList.Contains(s.ThreadID)
group new { s } by new { s.ThreadID } into d
let maxMsgID = d.Where(x => x.s.ContactID != contactID).Max(x => x.s.MessageID)
select new {
LastMessage = d.Where(x => x.s.MessageID == maxMsgID).SingleOrDefault().s
};
但是,由于ToList的以下错误,我的代码无法编译:
无法从转换
“System.Linq.IQueryable”
到
'System.Collections.Generic.IEnumerable'
有人对如何实施这一点有什么建议吗?或者关于如何简化此代码的任何建议?您的查询将返回一组匿名类型;不能将其隐式转换为列表 相反,您应该选择字符串本身。您不需要任何匿名类型 换成
var threadList = pdc.Messages.Where(s => s.ContactID == contactID)
.Select(s => s.ThreadID)
.Distinct()
.ToList();
var result = from s in pdc.Messages
where threadList.Contains(s.ThreadID)
group s by s.ThreadID into d
let maxMsgID = d.Where(x => x.ContactID != contactID).Max(x => x.MessageID)
select new {
LastMessage = d.Where(x => x.MessageID == maxMsgID).SingleOrDefault()
};
您不需要在group子句中创建匿名类型。