[英]Entity Framework: How to select nested entity
我的实体层次结构是客户>地址>联系人。 因此,我使用此代码来迭代联系方式。
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
是联系人类型的变量。
所以请告诉我我该怎么做。
使用SelectMany
代替Select
。
Select
投影每个单独的元素,对其余的枚举不做任何事情。 所以Addresses.Select(a=>a.Contacts.Where(...))
可以枚举任何Address.Contacts.Where(...)
。 就是 您会得到一个可枚举的枚举。
要获得单个枚举,您需要将此列表弄平。 SelectMany
就是这样做的。
甚至说
foreach (var existingContacts in <some enumerable>)
{
CurrentContacts = existingContacts;
}
看起来很奇怪 除非循环中没有其他逻辑,否则可以将循环替换为;
CurrentContacts= <some enumerable>.LastOrDefault();
而且,如果您实际上不关心使用哪个联系人,只要它的ContactID = 5即可;
CurrentContacts= <some enumerable>.FirstOrDefault();
我认为您有两个问题,但是没有看到Contacts
类型是如何定义的,这只是一个猜测。
正如@Taemyr指出的那样,您需要使用SelectMany
而不是Select
来展平集合的集合。
但是除非Contacts
是从List<EFTest.Contacts>
继承的,否则您仍然无法执行赋值操作,您需要将变量声明更改为:
IEnumerable<Contacts> CurrentContacts = null;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.