带日期参数的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来比较日期之类的东西,没有任何效果
请帮…
这应该可以为您工作:
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();