2016-07-08 65 views
2

我想在LINQ查询中计数它的工作正常,无需比较日期,但在比较日期之后它会给出异常。在LINQ查询中获得计数

public static IList GetAllCategoryData() 
{ 
    using (var objEntity = new BlueCouponEntities()) 
    { 
     return (from TBL in objEntity.CategoryMasters.AsEnumerable() 
       let IIT = TBL.CategoryImageTransactions 
       select new 
       { 
       TBL.CategoryID, 
       TBL.CategoryName, 
       CategoryCount = objEntity.OfferCategoryMasters.Where(Lg => Lg.CategoryID == TBL.CategoryID && Lg.OfferMaster.EndDate > DateTime.Now.Date).Count(), 
       } 
      ).ToList(); 
    } 
} 

错误的是:指定的类型成员;日期;在LINQ to Entities中不受支持。仅支持初始化程序,实体成员和实体导航属性。

+0

SQL-to-Entities不支持Date类型。 –

+0

@WicherVisser在.NET标准库中没有类型Date,它是'DateTime'结构体上的一个实例属性,返回一个与当前实例具有相同日期的'DateTime',但时间为00: 00:00' – kai

回答

2

你必须使用EntityFunctions.TruncateTime得到的DateTime

的日期部分
using (var objEntity = new BlueCouponEntities()) 
{ 
    return (from TBL in objEntity.CategoryMasters.AsEnumerable() 
       let IIT = TBL.CategoryImageTransactions 
       select new 
       { 
       TBL.CategoryID, 
       TBL.CategoryName, 
       CategoryCount = objEntity.OfferCategoryMasters.Where(Lg => Lg.CategoryID == TBL.CategoryID && Lg.OfferMaster.EndDate > EntityFunctions.TruncateTime(DateTime.Now)).Count(), 
       } 
      ).ToList(); 
} 

由于DateTime.Now是目前恒,你也可以这样写这个

using (var objEntity = new BlueCouponEntities()) 
{ 
    DateTime now = DateTime.Now.Date; 
    return (from TBL in objEntity.CategoryMasters.AsEnumerable() 
       let IIT = TBL.CategoryImageTransactions 
       select new 
       { 
       TBL.CategoryID, 
       TBL.CategoryName, 
       CategoryCount = objEntity.OfferCategoryMasters.Where(Lg => Lg.CategoryID == TBL.CategoryID && Lg.OfferMaster.EndDate > now).Count(), 
       } 
      ).ToList(); 
} 
+0

第二个例子将解决查询跨越午夜运行的罕见问题。 –

+0

这是一个过度复杂的做法。问题在于'Date'不是L2E中的公认属性,但没有什么能够阻止您将'DateTime.Now.Date'分配给本地变量,而是在查询中使用它,就像在@ BappyDatta的答案中一样。 – kai

1

它无关与Count()函数。正如例外说的,它的 是一个DateTime问题。使用DbFunctions.TruncateTimeEntityFunctions.TruncateTime因为EF6已废弃)

public static IList GetAllCategoryData() 
{ 
    using (var objEntity = new BlueCouponEntities()) 
    { 
     return (from TBL in objEntity.CategoryMasters.AsEnumerable() 
       let IIT = TBL.CategoryImageTransactions 
       select new 
       { 
       TBL.CategoryID, 
       TBL.CategoryName, 
       CategoryCount = objEntity.OfferCategoryMasters.Where(Lg => Lg.CategoryID == TBL.CategoryID && EntityFunctions.TruncateTime(Lg.OfferMaster.EndDate) > EntityFunctions.TruncateTime(DateTime.Now.Date)).Count(), 
       } 
      ).ToList(); 
    } 
} 
1

添加下面几行:

var today = DateTime.Now.Date; 

然后用今天代替DateTime.Now.Date到LINQ查询。