C# 带有日期参数的条件where子句引发的错误不支持转换为SQL。使用C进行Linq到SQL时出错

C# 带有日期参数的条件where子句引发的错误不支持转换为SQL。使用C进行Linq到SQL时出错,c#,sql-server,linq-to-sql,C#,Sql Server,Linq To Sql,我正在使用Visual C 2008和dot Net framework 4.5开发一个linq to sql项目。 我的问题如下 var q = from a in dc.GetTable<invoice_in>() join b in dc.GetTable<supplier>() on a.supplier_id equals b.id where a.invoice_date >= date_f

我正在使用Visual C 2008和dot Net framework 4.5开发一个linq to sql项目。 我的问题如下

var q =
        from a in dc.GetTable<invoice_in>()
        join b in dc.GetTable<supplier>()
        on a.supplier_id equals b.id
        where a.invoice_date >= date_from
        select new Invoice_in(a.id, a.amount ?? 0, a.invoice_number ,
                              a.supplier_id ?? 0, a.supplier.s_name,
                              a.invoice_date ?? System.DateTime.Today);
其中,w.invoice_date为DateTime类型,是我定义的invoice_类的数据成员。 添加最后几行代码会导致以下运行时错误: 没有支持的到SQL的转换

我在网上尝试过很多方法,比如使用SQLMethods来比较日期之类的东西,但都不管用


请帮忙。。。提前感谢…

这应该适合您:

var q =
    from a in dc.GetTable<invoice_in>()
    join b in dc.GetTable<supplier>()
        on a.supplier_id equals b.id
    select a;

//since you compared date_from against null I assume it is Nullable<DateTime>
if (date_from.HasValue)
    {
        q = q.Where(a => a.invoice_date >= date_from.Value);
    }

var result = 
q.Select(a => new Invoice_in(a.id, a.amount ?? 0, 
                             a.invoice_number ,
                             a.supplier_id ?? 0, 
                             a.supplier.s_name,
                             a.invoice_date ?? System.DateTime.Today))
 .ToList();

为什么不在linq查询中添加日期的条件?其中date_from==null | a.invoice_date>=date_from非常感谢。这有帮助,但我从中删除了date_的value属性,因为它是DateTime对象。但是有什么区别呢?为什么在结束时执行select解决了这个问题?在对象创建过程中,您使用了一个.Invoice\u日期??System.DateTime.Today和next将其与where条件中的“date_from”进行比较-无法正确解析。顺便说一句,q是可查询的,所以在我们的例子中,只有将数据枚举到列表中,才能从数据库中获取数据。首先枚举q,然后选择新发票(如下所示):var result=q.ToList.Selecta=>new Invoice_in。。。;它应该表现得更快。
var q =
    from a in dc.GetTable<invoice_in>()
    join b in dc.GetTable<supplier>()
        on a.supplier_id equals b.id
    select a;

//since you compared date_from against null I assume it is Nullable<DateTime>
if (date_from.HasValue)
    {
        q = q.Where(a => a.invoice_date >= date_from.Value);
    }

var result = 
q.Select(a => new Invoice_in(a.id, a.amount ?? 0, 
                             a.invoice_number ,
                             a.supplier_id ?? 0, 
                             a.supplier.s_name,
                             a.invoice_date ?? System.DateTime.Today))
 .ToList();