【问题标题】:Can't convert one generic list to another无法将一个通用列表转换为另一个
【发布时间】:2011-10-28 13:30:03
【问题描述】:

我有以下清单:

List<view_zoodoffers> list = sqlEntities.viewOffers
    .Where(o => o.ProductId == productId)
    .GroupBy(o => o.OfferId)
    .ToList();

OfferIdlong:当我尝试转换列表时出现以下错误:

Error 27 Cannot implicitly convert type System.Collections.Generic.List&lt;System.Linq.IGrouping&lt;long,myDAL.viewOffers&gt;&gt; to System.Collections.Generic.List&lt;myDAL.viewOffers&gt;:

我做错了什么?

我想要这样的功能:

SELECT * FROM ViewOffers group by offerid

【问题讨论】:

  • 这是一个糟糕的类名;它应该被称为ViewOffer
  • 是的类名是 ViewOffer,ViewOffer 是我正在获取记录的视图,现在我想按 offerId 获取记录组。当我使用查询进行分组时,它工作正常。
  • 我想要这个功能“SELECT * FROM ViewOffers group by offerid”
  • Sami:您是否尝试过手动对 SQL Server 运行此查询?你会得到一个错误。但是你可以运行SELECT offerid FROM ViewOffers group by offerid
  • SQL 'group by' 每个组只保留一项。 LINQ GroupBy 保留所有项目,仅根据 lambda 表达式(的结果)进行分组。

标签: c# .net linq entity-framework-4 compiler-errors


【解决方案1】:

正如错误消息明确所述,GroupBy 正在返回 IGroupings 的列表,这与 ViewOffers 的列表不同。

您可以通过添加.Select(g =&gt; g.Last())从每个组中获取单个元素

【讨论】:

    【解决方案2】:

    当您使用 GroupBy 扩展方法时,您将获得分组项目列表,其中每个组都可以枚举具有相同 OfferId 的元素。这就是您的操作结果为 'System.Collections.Generic.List&lt;System.Linq.IGrouping&lt;long,myDAL.viewOffers&gt;&gt;' 的原因。查看IGouping 文档。

    【讨论】:

      【解决方案3】:

      你不能把“x的分组结果”放到“x的列表”中!

      使用

      List<IGrouping<long,myDAL.viewOffers>> list = 
      

      或者只是

      var list = ...
      

      这就是你需要的:

      sqlEntities.viewOffers
          .Where(o => o.ProductId == productId)
          .GroupBy(o => o.OfferId)
          .Select(o => o.Key);
      

      sqlEntities.viewOffers
          .Where(o => o.ProductId == productId)
          .Select(o => o.OfferId)
          .Distinct();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-01
        相关资源
        最近更新 更多