无法将lambda表达式转换为类型'bool',因为它不是委托类型错误

时间:2017-11-12 10:32:51

标签: c# linq

我的代码有什么问题? 获取错误“无法将lambda表达式转换为类型'bool',因为它不是委托类型”和“无法将查询表达式转换为预期的委托类型,因为块中的某些返回类型不能隐式转换为委托返回类型”< / p>

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;
    }

1 个答案:

答案 0 :(得分:2)

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是否大于或等于今天的开始更少而不是未来两天的开始。这就是上面的代码所做的(通过使用AddDays)。

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

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

为:

var today = DateTime.Today;

因为最好直接处理DateTime