为'null'元素设置一个组

时间:2017-07-10 09:36:01

标签: .net vb.net linq

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

我正在尝试使用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>'

你将如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

我总是在方法语法中使用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无法按预期工作。

考虑使用方法语法。