我从数据库中提取了一个查询:
List<myClass> items = new List<myClass>(from i in context select new myClass { A = i.A,B = "",// i doesn't know this,this comes from elsewhere C = i.C }
我也有另一个查询做类似的事情:
List<myClass2> otherItems = new List<myClass2>(from j in context select new myClass2 { A = j.A,// A is the intersection,there will only be 1 A here but many A's in items B = j.B }
实际上,这些类更大,查询数据不仅由数据库而且由服务器分开.对于item.A相交的所有项目,是否可以使用LINQ查询来填充属性B.所有内置的LINQ谓词仅显示聚合,选择或bool表达式.
在我的大脑里,我有这样的东西,但这是全部的:
items.Where(x => x.B = (otherItems.Where(z => z.A == x.A).Single().B));
或者,我很乐意尝试在LINQ中进行这项工作,并且应该放弃它,赞成一个循环,其中实际设置变得微不足道?由于截止日期,我将使用for循环(而且长期来看,它可能最终会变得更加易读),但是可以这么做吗?需要一个扩展方法来添加一个特殊的谓词来允许这个吗?
解决方法
LINQ专为查询而设计.如果你想设置东西,你一定要使用一个循环(可能是foreach).这并不意味着您将无法使用LINQ作为该循环的一部分,但您不应该尝试在LINQ本身中应用副作用.