如何使用另一个也从查询中提取的对象的值来设置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 }