1

我目前正在开发一种必须给我的表达式方法(用于 linq to entity 查询)

  • 给定期间的天数(开始日期和结束日期)
  • 如果特价日在此期间,则减少此天数。

我的想法如下:

  • 生成一个包含所有日期的可枚举(并使用 Enumerable.Range)
  • 在这个可枚举上创建一个 .Where 以删除特价日期 Like a MyEnumerable.Where(a => a != "20120101")
  • 之后,返回一个 MyEnumerable.Count()

我来了这个代码:

return (p) => Enumerable
                  .Range(1, 4)
                  .Where(a => a != 20120101)  
                  .AsQueryable()
                  .Count()

我试图作为一个列表,作为一个可查询的,(如示例)和没有办法!它不起作用!我总是收到这个错误:

LINQ to Entities 无法识别方法 'System.Collections.Generic.IEnumerable`1[System.Int32] Range(Int32, Int32)' 方法,并且此方法无法转换为存储表达式。

你对此有什么想法吗?使用可枚举当然不是强制性的,任何可行的解决方案都是好的^^

提前谢谢!

为了简化我的问题,这不起作用,我想这样做。

(
  from foo in User 
  select new 
  { 
    a = Enumerable.Range(1,4).Count() 
  }
).Take(1)

更多信息:-)

如果我这样做(外部化变量中的可枚举):

var foo = Enumerable.Range(1, 4);
return (p) => foo.Where(a => a != 20110101).Count();

这次它有效,但我无法用这种方法定义范围开始和结束!

4

1 回答 1

1

下面的代码生成一个真实的 DateTime 范围,因此可以正确处理闰年、不同的月末等等。它还正确处理 daysToExclude 为空或为空。

DateTime baseDate = DateTime.Now;
DateTime[] daysToExclude = new DateTime[] { new DateTime(2012, 6, 25), new DateTime(2012, 6, 30) } ;
int numberOfDays = baseDate.AddMonths(1).Subtract(baseDate).Days;

int days = Enumerable.Range(0, numberOfDays).Select(day => baseDate.Date.AddDays(day)).Except(daysToExclude ?? Enumerable.Empty<DateTime>()).Count();
于 2012-06-18T18:02:12.173 回答