我想测试LINQ可以走多远。我试图实现的是一个单一表达式而不是循环的对象列表上的属性分配。我想采取listA中的所有项目并更新IsMatched
属性,但只有在listB中有相应项目(这是不同类型)时,这可能吗?是否可以使用LINQ执行基于集合的属性分配?
示例代码:
public struct A { public int x; public bool IsMatched;}
public struct B {public int x;}
static void Main(string[] args)
{
List<A> listA = new List<A>();
List<B> listb = new List<B>();
listA.Add(new A() { x=1});
listA.Add(new A() { x=2});
listA.Add(new A() { x=3});
listb.Add(new B() { x=2});
listb.Add(new B() { x=3});
listA = listA.SelectMany(fb => listb, (fb, j) => new {a=fb, b=j})
.Where (anon => anon.b.x == anon.a.x).Select(anon => new A() {x=anon.a.x, IsMatched=true})
.ToList(); // this does not do what I want.
}
我用尝试的SelectMany但这只返回匹配的项目,或者是我不想要一个笛卡尔乘积。
上的副作用的问题,见http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx – 2010-10-29 04:49:16