使用Group by获取自定义类型的新列表

时间:2014-04-15 10:37:56

标签: c# .net linq

我有一个名为Holding的自定义类型列表。我正在尝试使用LNIQ来查询此列表中的某些值。我会返回一个类型为Hold的新列表。

以下是我目前所使用的不起作用的行。

List<Holding> hlds = _holdingList
    .Where(hld => hld.IdSedol == lookThroList[i].Sedol)
    .GroupBy(hld => new Holding())
    .ToList();

通过将上面的行更改为var hlds =确实有效并产生正确的结果。为什么我不能投出或做一些让第一线工作的东西?

下面的一行我不太确定。返回的Holding对象将引用原始列表中的保持对象还是新对象?

GroupBy(hld => new Holding())

更新

我之所以使用GroupBy(其外观错误)是因为我不想要多个相同的基金代码,只是想在基金代码不同的地方。但是,考虑到这一点,我不需要分组。

1 个答案:

答案 0 :(得分:3)

听起来这就是你所需要的:

List<Holding> hlds = _holdingList
    .Where(hld => hld.IdSedol == lookThroList[i].Sedol)
    .ToList();

GroupBy()永远不会生成Holding的集合 在您的代码中,GroupBy()将生成IEnumerable<IGrouping<Holding, Holding>>

如果要过滤掉重复项,可以执行此操作(假设Holding类具有FundCode属性或类似内容):

List<Holding> hlds = _holdingList
          .Where(hld => hld.IdSedol == lookThroList[i].Sedol)
          .GroupBy(hld => hld.FundCode)
          .Select(g => g.First())
          .ToList();

Linq也有一个Distinct()方法,但这通常需要定义一个IEqualityComparer,在这种情况下可能有点矫枉过正。