c#LINQ AsEnumerable Groupby Where

时间:2018-01-26 13:35:18

标签: c# linq

我有一个数据表,我将返回到UI层。

我有多个具有相同FirstId值的表。一些可能在FieldOne中具有价值。我只想将FieldOne为null的记录分组。

我使用.Where和.Groupby尝试了以下LINQ语句,但.Where删除了FieldOne中包含值的所有记录,然后执行GroupBy。在UI网格中,缺少具有FieldOne值的记录。我想只使用空的FieldOne值对记录进行分组,并且仍然具有FieldOne值的记录。感谢。

MyDataAsEnumerable()
    .Where(f => f.Field<string>("FieldOne") == null)
    .GroupBy(r => new { pp1 = r.Field<int>("FirstId") })
    .Select(g => g.First())
    .CopyToDataTable();

1 个答案:

答案 0 :(得分:0)

你可以制作一个人工分组键:

.GroupBy(
  r => new { pp1 = f.Field<string>("FieldOne") == null ? -1 : r.Field<int>("FirstId") })

在这里,我使用-1作为黑客来创建一个单独的组。确保此int值未被使用。你也可以精确地解决这个问题,但希望这没关系。