Linq匿名类查询问题`高手来啊
- C# code
var query = from ep in db.Enterprise select new { Validity = ep.SecondHouse.FirstOrDefault().Validity==null?new DateTime(1900,01,01):DateTime.Parse(ep.SecondHouse.FirstOrDefault().Validity) };sql查询里字符串是可以跟GETDATE() 直接比对而.net却不能 字符串< >dateTime.now 怎么解决
设置断点为什么生成的语句是
- SQL code
SELECT (CASE WHEN NOT (EXISTS( SELECT TOP (1) NULL AS [EMPTY] FROM [dbo].[SecondHouse] AS [t2] WHERE [t2].[EntId] = [t0].[Id] )) THEN 1 WHEN NOT NOT (EXISTS( SELECT TOP (1) NULL AS [EMPTY] FROM [dbo].[SecondHouse] AS [t2] WHERE [t2].[EntId] = [t0].[Id] )) THEN 0 ELSE NULL END) AS [value], ( SELECT [t4].[Validity] FROM ( SELECT TOP (1) [t3].[Validity] FROM [dbo].[SecondHouse] AS [t3] WHERE [t3].[EntId] = [t0].[Id] ) AS [t4] ) AS [s]FROM [dbo].[Enterprise] AS [t0]
三目表达式为什么没成立?生成的语句变成了2列?忘高手帮我解决
[解决办法]
var query = from ep in db.Enterprise
let sh=ep.SecondHouse.FirstOrDefault()
select new
{
Validity = sh==null?DateTime.Parse("1900-1-1"):DateTime.Parse(sh.Validity)
};
你的结果之所以会生成两列 和你后来的自定义类有关吧。。
和三目运算符木有关系
[解决办法]
linq to sql?
延迟查询,最终转换成sql语句,好像有过类似帖子。
1、时间转换 不要用 DateTime.Parse,linq to sql不支持它,支持ToDate,ToInt,Tobool等,即用
Convert.ToDateTime
2、用Convert.ToDateTime转换时,不用去判断 这个值是否为NULL,直接使用,会生成对应的sql时间转 换,为NULL的会自动过滤, 可以再 进行时间比较,你那个三元可以不用。
这样生成的sql语句将简单的多。