带日期参数的where子句引发一个不支持转换为SQL的条件.c#中Linq to SQL错误

本文关键字:SQL 转换 不支持 条件 错误 to Linq 一个 子句 where 参数 | 更新日期: 2023-09-27 18:04:28

我正在使用Visual c# 2008和。Net框架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);

invoce_in是一个linq类,而Invoice_in是一个我用类似结构定义的类。当我在最后一个查询的where子句中放入日期比较时,一切都没问题。但是我需要使用一个条件where,因为查询参数在主查询子句

之后

我在前面的代码

中添加了以下行
if (date_from != null)
        {
            q = q.Where(w => w.invoice_date >= date_from);
        } 

w.invoice_date是DateTime类型,它是类Invoice_in(由我定义)的数据成员。添加最后一行代码会导致以下运行时错误:"不支持SQL转换"

我在网上尝试了几十种方法,比如使用SQLMethods来比较日期之类的东西,没有任何效果

请帮…

带日期参数的where子句引发一个不支持转换为SQL的条件.c#中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
    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();