为可返回的IQueryable分配可空对象

时间:2009-10-31 15:55:58

标签: asp.net-mvc linq iqueryable nullable

我将IQueryable<Customer>返回到另一个方法进行一些查询操作。返回方法如下:

return from cust in _dbCustList
               select new Customer
               {
                   CustomerId = cust.Customer_Id,
                   FirstName= cust.First_Name,
                   LastName= cust.Last_Name,
                   DOB= cust.Date_Of_Birth,
                   LoginTime = cust.Login_Time ?? new TimeSpan(0, 0, 0);
               };

在上面的结果中,cust.Login_Time是可以为空的属性。

当我尝试查询上述结果时,会抛出错误:

Method 'System.TimeSpan GetTimeSpan(System.Nullable`1[System.TimeSpan])' has no supported translation to SQL.

如何解决此错误?

2 个答案:

答案 0 :(得分:0)

为什么使用空检查?

当您删除null检查时,写入的查询将被转换为SQL查询并将被执行。现在你有了结果,你可以做任何你想要的魔法......

答案 1 :(得分:0)

我会查询匿名类型,然后将结果映射到内存中的业务对象:

var q = from cust in _dbCustList
        select new
        {
            cust.Customer_Id,
            cust.First_Name,
            cust.Last_Name,
            cust.Date_Of_Birth,
            cust.Login_Time
        };

return from cust in q.AsEnumerable()
       select new Customer
       {
           CustomerId = cust.Customer_Id,
           FirstName= cust.First_Name,
           LastName= cust.Last_Name,
           DOB= cust.Date_Of_Birth,
           LoginTime = cust.Login_Time ?? TimeSpan.Zero;
       };