如何使用另一个也从查询中提取的对象的值来设置linq查询中所有项的属性?

我有一个从数据库中提取的查询:

List items = new List(from i in context select new myClass { A = iA, B = "", // i doesn't know this, this comes from elsewhere C = iC } 

我还有另一个查询做类似的事情:

 List otherItems = new List(from j in context select new myClass2 { A = jA, // A is the intersection, there will only be 1 A here but many A's in items B = jB } 

实际上,这些类要大得多,查询数据不仅由数据库而且由服务器分开。 是否可以使用LINQ查询为items.A相交的所有items填充属性B. 所有内置的LINQ谓词只出现在聚合,选择或bool表达式中。

在我的脑子里,我有类似的东西,但这一切都是关闭的:

 items.Where(x => xB = (otherItems.Where(z => zA == xA).Single().B)); 

或者我试图在LINQ中完成这项工作是荒谬的,应该放弃它,转而支持实际设置变得微不足道的for循环? 由于截止日期,我将采用for循环(从长远来看,它可能最终会更具可读性),但是有可能这样做吗? 是否需要使用扩展方法来添加特殊谓词以允许此操作?

LINQ专为查询而设计。 如果你想设置东西,你肯定应该使用一个循环(可能是foreach )。 这并不意味着您将无法使用LINQ 作为该循环的一部分 ,但您不应该尝试在LINQ本身中应用副作用。

首先查询OtherItems。 对结果执行ToDictionary()。 然后,在查询数据库时,执行以下操作:

 var items = from i in context select new myClass { A = iA, B = otherItems[iA], C = iC }