不能将一个泛型列表转换为另一个泛型列表

本文关键字:列表 泛型 转换 另一个 一个 不能 | 更新日期: 2023-09-27 18:12:35

我有以下列表:

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

不能将一个泛型列表转换为另一个泛型列表

正如错误消息清楚地所述,GroupBy返回的是IGrouping s列表,这与ViewOffer s列表不同。

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

从每个组中获取单个元素

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

你不能把"result of grouping of x"放入"list of 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();