2016-05-07 40 views
0

我有一个有6列的表,每列代表一个object,因此每个表行都是6个对象的集合,每个对象都有一个属性colorLINQ to属性的对象对象集合约束

如何选择行中不超过4个单色对象的所有行?

例如:

obj1.color=red, obj2.color=green, obj3.color=blue, obj4.color=green, obj5.color=blue, obj6.color=green 
+0

到目前为止什么都试过?添加一些你已经试过的代码 – Alex

回答

2

在它构造具有的所有对象的阵列中的一行。然后按颜色分组,并检查所有组中没有超过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)); 
+0

当我运行这个\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

+0

and ur expression is not correct,testing it。syntax error – Alex

+0

u can not convert type to bool – Alex

1

这里是你如何能作出这样的工作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!");