Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LINQ:GROUPBY+Where in子句_Linq_Linq To Sql - Fatal编程技术网

LINQ:GROUPBY+Where in子句

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

我正在尝试实现一个T-SQL等价于where in select。。。LINQ中的代码

这就是我现在拥有的:

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子句中创建匿名类型。