日期:2014-05-20  浏览次数:20823 次

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语句将简单的多。