如何在实体中加入数据库表的日期列表?

时间:2018-05-01 10:03:22

标签: c# entity-framework linq

我列出了一年中每周的开始日期。

List<DateTime> yearWeeks = GetAllDaysOfWeekForYear(DateTime.Now.Year, DayOfWeek.Monday);

我想在我的数据库表中列出这些:

db.planner.Where(a => a.EmployeeId == CustomerId && a.Year == DateTime.Now.Year).Join(yearWeeks, c => c.WeekStarting, d => d.ToLongDateString(), (c, d) => new
        {
            yearDate = d.ToLongDateString(),
            c.WeekStarting
        }).ToList();

这会引发错误

  

无法从中推断出方法Queryable.Join的类型参数   用法。

我如何与linq一起加入这两个?

1 个答案:

答案 0 :(得分:0)

Join需要4个参数(第一个重载版本): 第一个是连接到(yearweeks)的序列,第二个是第一个序列(WeekStarting)的键,第三个参数是第二个序列的键,第四个参数是lambda选择匹配元素:

  

从两个匹配元素创建结果元素的函数。

DatesDeclared.planner = db.planners.Where(a => a.EmployeeId == 2 && a.Year == DateTime.Now.Year).Join(yearweeks, c => c.WeekStarting, d => d.Value, (c, d) => new
    {
        c.WeekStarting,
        d.Value
    }).ToList();

使用查询语法比lambda语法更易读,更简单:

var data = from p in planners
                   join w in yearweeks on p.WeekStarting equals w.Value
                   select new
                   {
                       p.WeekStarting,
                       w.Value
                   };

在不知道您要返回的类型的情况下,我无法知道DatesDeclared.planner的类型,因此上面的代码返回匿名类型列表