【问题标题】:groupby filtering in linqlinq中的groupby过滤
【发布时间】:2016-02-06 18:04:11
【问题描述】:

我需要这个查询的分组

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 时,得到 Under 错误

不能隐式转换类型 'System.Collections.Generic.List>' 至 'System.Collections.Generic.List'

【问题讨论】:

  • 这个错误没有被完全引用,这不会帮助人们找出你的问题。克里斯托斯已经解决了……他的答案是正确的。

标签: c# linq group-by


【解决方案1】:

_Result 的类型是 List&lt;tblInvoice&gt;。所以这里

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

你没有问题。您按发票订购,只需提取其中的 5 张,然后创建一个新的List&lt;tblInvoice&gt;

但是,这里

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

有问题。 GroupBy 返回一系列 IGrouping&lt;TKey,TElement&gt; 对象,然后调用 ToList 创建一个列表 这种类型的对象,不是List&lt;tblInvoice&gt;。因此,您不能将这种类型的列表的引用分配给可以保存对 List&lt;tblInvoice&gt; 对象的引用的变量。

【讨论】:

    【解决方案2】:

    找到了解决问题的新方法当然不用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;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-06-20
      • 1970-01-01
      • 1970-01-01
      • 2019-02-06
      • 2018-12-09
      • 2017-01-20
      • 2017-01-09
      • 2018-07-22
      • 2013-07-10
      相关资源
      最近更新 更多