我正在尝试where in (select ...)
在LINQ中实现T-SQL等效代码.
这就是我现在拥有的:
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
};
Run Code Online (Sandbox Code Playgroud)
但是,由于以下错误,我的代码将无法编译ToList()
:
无法从'
System.Linq.IQueryable<AnonymousType#1>
' 转换为'System.Collections.Generic.IEnumerable<string>
'
有人对如何实现这个有任何建议吗?或者有关如何简化此代码的任何建议?
SLa*_*aks 12
您的查询返回一组匿名类型; 你不能隐含地将它转换为.List<string>
相反,您应该选择字符串本身.您不需要任何匿名类型.
将其更改为
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()
};
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18911 次 |
最近记录: |