Linq-To-Entities'包含'第1条 - 许多关系

时间:2013-02-15 19:48:53

标签: c# asp.net entity-framework linq-to-entities entity-sql

考虑这样的(简化的)表结构:

[USERS]

  • EMPID
  • NAME

[APPOINTMENTS]

  • (FK_APPT_USER)EMPID
  • APPTTYPEID
  • COMPLETE

每个用户都可以拥有0 .. *约会,每个约会可以是许多APPTYPEID之一,并且可以是完整的也可以是不完整的。

我想过滤IQueryable [USER]查询的结果集,使其仅包含具有某个typeID(例如1)的appt的USERS,并且COMPLETE字段位于值列表中。我这样做是作为gridview过滤器的一部分,允许用户选择仅显示特定约会类型的已完成或未完成的用户。

List<string> vals = new List<string> {"Y","N"}
//maybe the user has only selected Y so the above list only contains 1 element
var qry = ctx.USER.Where(x=> vals.Contains( ? ));
//bind etc

如果我与列表进行比较的值与USER对象的关系为1-1,那么这很容易做到,例如:

var qry = ctx.USER.Where(x=> vals.Contains(x.NAME)); 

但是我不明白如何使用像我的约会表这样的1-many关系来做这件事,这让我全都陷入困境,试图将实体sql概念化。谁能解释一下如何做到这一点?

1 个答案:

答案 0 :(得分:2)

qry = ctx.USER.Where(u => u.APPOINTMENTS
                           .Where(a => a.APPTYPEID == 1)
                           .Any(a => vals.Contains(a.COMPLETE)));

UPDATE (添加了返回那些根本没有约会的用户)

qry = ctx.USER.Where(u => 
        !u.APPOINTMENTS.Any() ||
         u.APPOINTMENTS.Any(a => a.APPTYPEID == 1 && vals.Contains(a.COMPLETE)));
相关问题