C# 带有日期参数的条件where子句引发的错误不支持转换为SQL。使用C进行Linq到SQL时出错
我正在使用Visual C 2008和dot Net framework 4.5开发一个linq to 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
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();