【问题标题】:Using Entity Framework 4 how to filter referenced Entity Collection使用 Entity Framework 4 如何过滤引用的实体集合
【发布时间】:2012-08-01 07:27:56
【问题描述】:

我正在使用带有 C# 的 Entity Framework 4。我有Contact 具有Addresses 引用实体集合的对象。因此,一个Contact 可以拥有多个Address 实体。我想要做的是将返回的与Contact 关联的Addresses 过滤为仅来自多伦多市。

这是我正在使用的 LINQ 查询,但只要至少有一个 City == "Toronto",它就会返回所有 Addresses。我想将返回的 Address 实体限制为仅包含具有 City == "Toronto"Address 实体。如何构建 LINQ 查询来执行此操作?

var vcontact = from c in context.Contacts
               orderby c.LastName
               where c.Addresses.Any(a => a.City == "Toronto")
               select c;

【问题讨论】:

  • 您想要一份在多伦多有地址且只有多伦多地址的联系人列表?
  • 是的。我希望与多伦多的至少一个地址有任何联系,并且返回的地址实体应仅包括城市为多伦多的地址实体

标签: c# linq entity-framework entity-framework-4


【解决方案1】:
var vcontact = from c in context.Contacts
               orderby c.LastName
               where c.Addresses.Any(a => a.City == "Toronto")
               select new Contact
               {
                   LastName = c.LastName;
                   // map all remaining properties of Contact
                   Addresses = c.Addresses.Where(a => a.City == "Toronto")
               }; 

【讨论】:

  • 感谢您的代码。使用大括号前使用的联系人无法编译 LINQ 查询。有没有像你想要的那样命名匿名类型?
  • @user31673 - 真的吗? “编译失败”?你能再含糊一点吗?
  • @user31673,你能粘贴你收到的错误吗? Contact 不打算成为匿名类型,它只是您实体的新实例。如果您想改用命名类型,请创建一个新类(可能是ContactViewModel)并使用它来代替Contact
  • 现在我明白你的意思了。我以为你正在创建一个匿名类型。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-23
  • 1970-01-01
  • 2011-10-30
  • 1970-01-01
  • 1970-01-01
  • 2014-10-26
  • 1970-01-01
相关资源
最近更新 更多