首页 > 解决方案 > 如何将日期列表与实体中的数据库表连接起来?

问题描述

我有一年中每周开始日期的列表。

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 将两者结合在一起?

标签: c#entity-frameworklinq

解决方案


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,所以上面的代码返回了一个匿名类型的列表


推荐阅读