c# - 无法将 lambda 表达式转换为类型 'bool',因为它不是委托(delegate)类型错误

标签 c# linq

我的代码有什么问题吗? 收到错误“无法将 lambda 表达式转换为“bool”类型,因为它不是委托(delegate)类型”和“无法将查询表达式转换为预期的委托(delegate)类型,因为 block 中的某些返回类型不能隐式转换为委托(delegate)返回类型”

Public List<Track> FillGridByDrId(DateTime? fromdate, DateTime? todate ,int DoctorId)
    {
        string today = DateTime.Today.ToString("yyyy/MM/dd");

        var clinicid = BranchId;
        var track= (from td in db.table join pt in db.table2 on td.dataequals pt.data where (m => Convert.ToDateTime(m.time).Date >= fromdate&& Convert.ToDateTime(m.time).Date <= todate && m.id== id)
                            select new Appointment_Track
                            {
                                data=td.data
                            }
                           ).ToList();
        return track;
    }

最佳答案

where (m => Convert.ToDateTime(m.AppTime).Date >= fromdate
         && Convert.ToDateTime(m.AppTime).Date <= todate && m.ClinicId == clinicid)

也许应该是:

// Straight after var clinicid = CmsHelper.BranchId;
var todatenextday = todate.AddDays(1);

// then replace your non-working code with 
where td.AppTime >= fromdate
         && td.AppTime < todatenextday  && td.ClinicId == clinicid

您通常希望避免在 Entity Framework 中使用 Convert.ToDateTime,因为 EF 不知道如何将其转换为 SQL。但是,例如,如果您想要今天或明天的任何 DateTime,那么您需要检查 DateTime 是否大于或等于今天的开始时间且小于 future 两天的开始时间。这就是上面代码的作用(通过使用 AddDays)。

此外,根据您今天的使用方式,您可能希望考虑更改:

string today = DateTime.Today.ToString("yyyy/MM/dd");

至:

var today = DateTime.Today;

因为最好直接处理 DateTime

关于c# - 无法将 lambda 表达式转换为类型 'bool',因为它不是委托(delegate)类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47247769/

相关文章:

c# - 按 Enter 键登录 WPF 窗口。

c# - 在 lambda 表达式中的另一个对象列表中获取一个对象列表

c# - 获取 XML 的 XElement

c# - 通过命令行构建 Visual Studio 项目

c# - 从 C# 客户端向 C 服务器发送消息

c# - 如何让 Distinct() 处理自定义对象的集合

linq - 在 LINQ 中仅选择一列

c# - someIEnumerable.Select 扩展方法的代码是什么?

c# - 使用 LINQ to SQL 添加记录的问题

c# - 如何在 C# 中的 SQL 查询字符串中插入变量