【问题标题】:Have a group for 'null' elements有一个“空”元素组
【发布时间】:2017-07-10 09:36:00
【问题描述】:

我有一组对象,其参数可能已定义,也可能未定义。

我正在尝试对使用 LINQ 的人进行分组。

我正在使用以下语法:

(From o In oList Group By Category = o.sCategory Into CategoryGroup = Group)

它工作正常,但是不返回没有sCategory 属性的对象。

我想实现同样的目标,但为这些对象增加一个组。

我发现了一个类似的问题(Linq GroupBy with each null value as a group),但它使用方法语法,我想坚持使用查询语法,因为我认为它更具可读性。

我尝试转换它,例如:

(From o In oList Group By Category = (Function (p) IIf(p.sCategory Is Nothing,"Empty", p.sCategory)) Into CategoryGroup = Group)

不起作用:我返回了一个包含所有对象的组,以及名称 '<generated method>'

您将如何实现这一目标?

【问题讨论】:

  • “对我没有多大帮助” 只是一点点,比如说 90%?开个玩笑,请告诉我们什么不起作用,否则很难提供帮助。 编辑您的修复“不起作用。”也不是更好
  • 我进行了编辑以反映我的失败 :) 我返回一个包含所有对象的组,名称为“”
  • 编辑你的问题以包含这个,不要评论它
  • 学习流利的(方法)语法。它使 LINQ 查询更易于编写和理解。并不是所有的函数都可以在查询语法中使用。

标签: .net vb.net linq


【解决方案1】:

我总是在方法语法中使用 LINQ。我试图用查询语法来做,但不知何故它不知道Group By

如果我使用方法语法来做,该函数可以工作

class MyObject
{
   string Category {get; set;}
   string Value {get; set;}
}

IEnumerable<MyObject> myObjects = new List<MyObject>
{
    new MyObject() {Category = "A", Value = "A1"},
    new MyObject() {Category = "A", Value = "A2"},
    new MyObject() {Category = "B", Value = "B1"},
    new MyObject() {Category = null, Value = "empty"},
    new MyObject() {Category = null, Value = "nothing"},
}
var groups = myObjects.GroupBy(myObject => myObject.Category);

结果是一个包含三组的序列: - 具有 Key = "A" 的组,将具有 "A1" 和 "A2" 的对象分组, - Key = "B" 的组,用 "B1" 将对象分组, - Key = null 的组,组成员具有“空”和“无”的对象

所以我认为查询语法中要么没有Group By,要么这个Group By 没有按您的预期工作。

考虑使用方法语法。

【讨论】:

    猜你喜欢
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    相关资源
    最近更新 更多