2016-02-06 99 views
0

过滤我需要一个GROUPBY此查询GROUPBY在LINQ

if (Randomize) 
{ 
    List<tblInvoice> _Result = db.tblInvoices.ToList(); 

    var _Temp = xxx.Where(p => (p.isPostalPayment == null || p.isPostalPayment == false)).ToList(); 
    _Result = _Temp.OrderBy(o => Guid.NewGuid()).Take(5).ToList(); 
    _Result = _Result.GroupBy(x => x.cUserID).ToList(); 
    return _Result; 
} 

,当我在查询中使用GROUPBY,错误 当我在这个查询中使用GROUPBY,得到了在错误

无法隐式转换键入 'System.Collections.Generic.List>' 到 'System.Collections.Generic.List'

+0

该错误没有完全引用,这不会帮助人们找出您的问题。 Christos已经解决了......他的回答是正确的。 – Corey

回答

2

_Result的类型是List<tblInvoice>。所以这里

_Result = _Temp.OrderBy(o => Guid.NewGuid()).Take(5).ToList(); 

你没问题。您可以通过您的发票订购,并且只要您购买其中的5个,即可创建新的List<tblInvoice>

然而,这里

_Result = _Result.GroupBy(x => x.cUserID).ToList(); 

出现了问题。 GroupBy返回一系列IGrouping<TKey,TElement>对象,然后调用ToList您创建此类对象的列表 和而不是 a List<tblInvoice>。因此,您无法将此类型的列表的引用分配给可以保存对List<tblInvoice>对象的引用的变量。

0

发现问题的新解决方案当然不使用groupby!

if (Randomize) 
{ 
    List<tblInvoice> _Result = new List<tblInvoice>(); 
    var _Temp = xxx.Where(p => (p.isPostalPayment == null || p.isPostalPayment == false)).ToList(); 
    List<long> _UserIDs = new List<long>(); 
    foreach (var _Row in _Temp.OrderBy(o => Guid.NewGuid()).ToList()) 
    { 
     if (_Result.Count == 3) 
      break; 

     if (!_UserIDs.Contains(_Row.ID)) 
     { 
      _UserIDs.Add(_Row.cUserID); 
      _Result.Add(_Row); 
     } 
    } 
    return _Result; 
}