繁体   English   中英

实体框架:如何选择嵌套实体

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM