相当于使用Linq或Lambda表达式的SQL BEVER语句

相当于使用Linq或Lambda表达式的SQL BEVER语句,linq,c#-4.0,lambda,Linq,C# 4.0,Lambda,不要认为这是一个repost,很难搜索单词between,因为它在所有东西中都有使用(比如搜索和) 我想根据日期范围筛选列表 我有一个包含一些日期的列表,我想按日期范围过滤它们。SQL中是否存在与between语句相当的Linq或Lambda语句 例如,以下代码在Linqpad(或Visual Studio)中不起作用: void Main() { 列表=新列表(); 添加(新列表示例(“名称1”,“2010年8月23日”); 添加(新列表示例(“名称2”,“2009年8月23日”); var

不要认为这是一个repost,很难搜索单词between,因为它在所有东西中都有使用(比如搜索和)

我想根据日期范围筛选列表

我有一个包含一些日期的列表,我想按日期范围过滤它们。SQL中是否存在与
between
语句相当的Linq或Lambda语句

例如,以下代码在Linqpad(或Visual Studio)中不起作用:

void Main()
{
列表=新列表();
添加(新列表示例(“名称1”,“2010年8月23日”);
添加(新列表示例(“名称2”,“2009年8月23日”);
var query=来自列表中的l
其中l.DateValue介于“2010年1月1日”和“2011年1月1日”之间
选择l;
}
公共类列表示例
{
公共列表示例(字符串名称、字符串日期值)
{
名称=名称;
DateValue=DateTime.Parse(DateValue);
}
公共字符串名称{get;set;}
公共日期时间日期值{get;set;}
}
像这样的东西

var query = from l in list
            where l.DateValue >= new DateTime(2010, 1, 1) 
               && l.DateValue <= new DateTime(2011, 1, 1)
            select l;
我看到您提供了一些以日期为字符串的示例。如果可能的话,我肯定会将解析逻辑(
DateTime.ParseExact
或其他)与查询分开。

var query=from l in list
var query = from l in list
        where new DateTime(1,1,2010) <= l.DateValue and DateValue <= new DateTime(1,1,2011)
        select l;
其中new DateTime(1,12010)
DateTime DT1=DateTime.Parse(“2010年1月1日”);
Datetime DT2=Datetime.Parse(“2011年1月1日”);
var query=来自列表中的l

其中l.DateValue>=DT1&&l.DateValue感谢我在>=方面遇到问题,需要创建一个DateTime。我觉得Linq有点困惑,因为他们改变了语法。@Simon:干杯。
=
与LINQ没有多大关系;它是
DateTime上的重载运算符。
您可以使用
DateTime.CompareTo
或类似的运算符,如果您愿意的话。感谢Ani-DateTime.Parse只是我在LinqPad中的示例,因为我不想将客户端代码发布到internet上。我所做的唯一一件事是将扩展函数更改为static以供全局使用您重写了扩展方法以支持Linq to Entities?看起来是的副本:如果我链接到实体框架,则Linq to Entities不支持扩展方法。这听起来是否正确,或者我遗漏了什么。NotSupportedException:方法“Boolean IsBetween(System.Nullable`1[System.DateTime],System.DateTime,System.DateTime,Boolean)”不支持到SQL的转换。
public static bool IsBetween(this DateTime dt, DateTime start, DateTime end)
{
   return dt >= start && dt <= end;    
}
var start = new DateTime(2010, 1, 1);
var end = new DateTime(2011, 1, 1);
var query = list.Where(l => l.DateValue.IsBetween(start, end));
var query = from l in list
        where new DateTime(1,1,2010) <= l.DateValue and DateValue <= new DateTime(1,1,2011)
        select l;
Datetime DT1 = DateTime.Parse("01 Jan 2010");
Datetime DT2 = DateTime.Parse("01 Jan 2011");
var query = from l in list
            where l.DateValue >= DT1 && l.DateValue <= DT2
            select l;