我有一组对象,其参数可能已定义,也可能未定义。
我正在尝试使用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>'
你将如何实现这一目标?
答案 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
无法按预期工作。
考虑使用方法语法。