如何使用lambda正确访问链接表字段
本文关键字:访问 链接表 字段 何使用 lambda | 更新日期: 2023-09-27 18:17:59
我正在尝试使用以下lambda代码访问链接表字段:
DateTime dtStartDate = "1/1/2013"; // or some date
var jobs = db.jobs.Include(d => d.docs)
.Where(d => d.docs.duedate >= dtStartDate);
下面是SQL Server中的表关系键:
jobs.JobID = docs.JobID
// Note: Check Existing Data = No.
那么当我尝试在第一个&中执行以下操作时,为什么上面的代码不起作用?上面第二行代码:
// errors here
// .duedate can't be found through the .Include() table, docs
d.docs.duedate
错误提示:
System.Collections.Generic。ICollection'不包含'duedate'的定义,也没有扩展方法'duedate'接受类型为'System.Collections.Generic '的第一个参数。可以找到ICollection(您是否缺少using指令或程序集引用?)
实体框架生成的类代码:
public partial class jobs
{
public jobs()
{
this.docs = new HashSet<docs>();
}
public int JobID { get; set; }
public virtual ICollection<docs> docs { get; set; }
}
public partial class docs
{
public int DocumentID { get; set; }
public Nullable<int> JobID { get; set; }
public Nullable<System.DateTime> duedate { get; set; }
public virtual jobs jobs { get; set; }
}
我已经在Visual Studio中更新了模型以匹配DB,但这仍然不起作用。知道为什么吗?非常感谢您的帮助。
根据您的需要,有以下几个选项:
如果您想要的工作任何文档都有截止日期>=开始日期:
var jobs = db.jobs.Include(j => j.docs)
.Where(j => j.docs.Any(d => d.duedate >= dtStartDate));
如果您想要的工作所有文档都有截止日期>=开始日期:
var jobs = db.jobs.Include(j => j.docs)
.Where(j => j.docs.All(d => d.duedate >= dtStartDate));
如果你想要所有的作业和只有文档的截止日期>=开始日期,那么它是棘手的。一种方法是将查询倒过来:
var docs = db.docs.Include(d => d.job)
.Where(d => d.duedate >= dtStartDate)
.Select(d => d.job)
.Distinct();