无法将一个通用列表转换为另一个

时间:2011-10-28 13:30:04

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

我有以下列表:

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<System.Linq.IGrouping<long,myDAL.viewOffers>> to System.Collections.Generic.List<myDAL.viewOffers>

我做错了什么?

我想要这样的功能:

SELECT * FROM ViewOffers group by offerid

3 个答案:

答案 0 :(得分:4)

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

您可以通过添加.Select(g => g.Last())

从每个组中获取单个元素

答案 1 :(得分:1)

您不能将“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();

答案 2 :(得分:1)

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