Lambda:在EF中使用.Include()和链接表数据

时间:2013-06-07 21:02:46

标签: c# linq entity-framework lambda

我正在尝试使用带有以下内容的lambda .Include()来过滤链接表数据:

var jobs = db.jobs.Include(d => d.docs)
           .Where(d => d.docs.startdate >= date1 && d => d.docs.enddate <= date1);
return View(jobs);

但这不起作用。有谁知道正确的语法是正确过滤链接表数据?谢谢!

更新:

d.docs.startdate
d.docs.enddate
当我使用d.docs.startdate或d.docs.enddate时,

“。startdate”和“.enddate”没有出现在intellisense中。我已经链接了表关系并保存了更改,但即使在代码中使用.Include()命令之后,intellisense也无法通过intellisense在docs表中找到startdate和enddate字段。

错误:'System.Collections.Generic.ICollection'不包含'duedate'的定义,并且没有扩展方法'duedate'接受类型'System.Collections.Generic.ICollection'的第一个参数可以找到(是你错过了使用指令或程序集引用?)

......不确定我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

Include()声明之后

Where()

var jobs = db.jobs.Where(d => d.docs.startdate >= date1 && d.docs.enddate <= date1)
             .Include(d => d.docs);
return View(jobs);

答案 1 :(得分:-1)

Where()内不应该有两个lambdas。所以你的查询应该是这样的:

var jobs = db.jobs.Where(d => d.docs.startdate >= date1)
                  .Where(d => d.docs.enddate <= date1)
                  .Include(d => d.docs);
return View(jobs);

或同时在一个lambda中的Where(你喜欢什么,两者都有相同的结果):

var jobs = db.jobs.Where(d => d.docs.startdate >= date1 && d.docs.enddate <= date1)
                  .Include(d => d.docs);
return View(jobs);

Where()Include()并不一样。 Where()过滤了您的数据,而Include()只是急于加载您的数据。