如何使用从查询中提取的另一个对象的值为linq查询中的所有项设置属性?
本文关键字:查询 linq 设置 属性 一个对象 何使用 提取 | 更新日期: 2023-09-27 18:11:52
我有一个查询从数据库拉:
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
}
实际上,这些类要大得多,而且查询的数据不仅由数据库分隔,而且由服务器分隔。是否有可能使用LINQ查询来填充所有items
的属性B,其中项目。一个相交吗?所有内置的LINQ谓词似乎只用于聚合、选择或bool表达式。
在我的脑海里,我有这样的东西,但这是全部关闭:
items.Where(x => x.B = (otherItems.Where(z => z.A == x.A).Single().B));
或者我是荒谬的,试图使这个工作在LINQ,应该放弃它,赞成一个for循环,实际设置变得微不足道?由于截止日期,我将诉诸于for循环(无论如何,从长远来看,它最终可能会更具可读性),但这可能吗?是否需要一个扩展方法来添加一个特殊的谓词来允许这一点?
LINQ是为查询而设计的。如果您试图设置内容,则绝对应该使用循环(可能是foreach
)。这并不意味着你不能使用LINQ 作为循环的一部分,但你不应该试图在LINQ本身中应用副作用。
先查询OtherItems。对结果执行ToDictionary()。然后,在查询数据库时,执行以下操作:
var items = from i in context
select new myClass
{ A = i.A,
B = otherItems[i.A],
C = i.C
}