实体框架:如何选择嵌套实体
本文关键字:实体 选择 嵌套 何选择 框架 | 更新日期: 2023-09-27 18:16:04
我的实体层次结构是客户>地址>联系人。因此,我使用此代码迭代联系人详细信息。
Contacts CurrentContacts = null;
foreach (var existingContacts in existingCustomer.Addresses.Select(a => a.Contacts.Where(cc=> cc.ContactID==5)))
{
CurrentContacts = existingContacts;
}
但是这行CurrentContacts = existingContacts;
抛出错误
我的错误是什么?不能隐式转换类型"System.Collections.Generic。IEnumerable"EFTest.Contacts"。存在显式转换(您是否缺少演员?)
existingContacts
为触点相关数据,CurrentContacts
为触点类型变量。
请告诉我该怎么做
我认为你有两个问题,但没有看到Contacts
类型是如何定义的,这只是一个猜测。
正如@Taemyr指出的,你需要使用SelectMany
而不是Select
来平整化集合的集合。
但是除非Contacts
是从List<EFTest.Contacts>
继承的,否则你仍然无法进行赋值操作,你需要将变量声明更改为:
IEnumerable<Contacts> CurrentContacts = null;
用SelectMany
代替Select
Select
预测每个单独的元素,并且对枚举的其余部分不做任何事情.所以Addresses.Select(a=>a.Contacts.Where(...))
是Address.Contacts.Where(...)
的可枚举数。Ie。你得到一个可枚举对象的可枚举对象。
要获得单个可枚举对象,您需要将该列表扁平化。这就是SelectMany
做的。
即使
foreach (var existingContacts in <some enumerable>)
{
CurrentContacts = existingContacts;
}
看起来很奇怪。除非循环中有其他逻辑,否则你可以用;
代替循环。CurrentContacts= <some enumerable>.LastOrDefault();
如果你不关心你使用哪个联系人,只要它有ContactID=5;
CurrentContacts= <some enumerable>.FirstOrDefault();