我有一个有6列的表,每列代表一个object
,因此每个表行都是6个对象的集合,每个对象都有一个属性color
。LINQ to属性的对象对象集合约束
如何选择行中不超过4个单色对象的所有行?
例如:
obj1.color=red, obj2.color=green, obj3.color=blue, obj4.color=green, obj5.color=blue, obj6.color=green
我有一个有6列的表,每列代表一个object
,因此每个表行都是6个对象的集合,每个对象都有一个属性color
。LINQ to属性的对象对象集合约束
如何选择行中不超过4个单色对象的所有行?
例如:
obj1.color=red, obj2.color=green, obj3.color=blue, obj4.color=green, obj5.color=blue, obj6.color=green
在它构造具有的所有对象的阵列中的一行。然后按颜色分组,并检查所有组中没有超过4个项目。
var rows = tbl.Where(x =>
new[]
{
x.obj1,
x.obj2,
x.obj3,
x.obj4,
x.obj5,
x.obj6
}
.GroupBy(y => y.color)
.All(g => g.Count() < 4));
当我运行这个\t var rows = tbl.Where(x => new [] {xg,x.d1,x)时,我不太擅长lambda语法或LINQ。 D2,x.c1,x.c2,x.rw1,x.rw2,x.lw1,x.lw2} \t \t \t \t \t .GroupBy(Y => y.Color) \t \t \t \t \t。所有(z => z.Count()<= 4));; \t rows.Dump();我在LINQPad中遇到一个错误:“Constructed arrays are only for Contains。 – flux9998
and ur expression is not correct,testing it。syntax error – Alex
u can not convert type to bool – Alex
这里是你如何能作出这样的工作linqpad样本:
// sample table
var table = new[] {
new {c1="blue", c2="red", c3="green"},
new {c1="blue", c2="blue", c3="blue"},
new {c1="blue", c2="red", c3="green"},
new {c1="red", c2="red", c3="red"},
};
table.Where(row => (
new[] {row.c1, row.c2, row.c3}) // transform rows to array of vals
.GroupBy(r => r) // group the vals
.Any(r => r.Count() == 3)) // filter the groups
.Dump(description: "I love LINQPad!");
到目前为止什么都试过?添加一些你已经试过的代码 – Alex