.net &引用;或;Linq Where()lambda表达式中的等价项

.net &引用;或;Linq Where()lambda表达式中的等价项,.net,linq,where-clause,.net,Linq,Where Clause,Linq中是否有一种方法可以用来构建SQL字符串,如“…where(a=1)或(a=2)”?您可以在单个where子句中使用标准的.NET布尔运算符: MyDataSource.Where(data => data.a == 'a' || data.a == 'b') 对于“or”或“&&for”和“etc”,使用与普通C#===>| |中相同的运算符 您当然可以在Where子句(扩展方法)中执行此操作。但是,如果需要动态构建复杂查询,可以使用 或者使用谓词生成器 var predic

Linq中是否有一种方法可以用来构建SQL字符串,如“…where(a=1)或(a=2)”?

您可以在单个where子句中使用标准的.NET布尔运算符:

MyDataSource.Where(data => data.a == 'a' || data.a == 'b')

对于“or”或“&&for”和“etc”,使用与普通C#===>| |中相同的运算符


您当然可以在Where子句(扩展方法)中执行此操作。但是,如果需要动态构建复杂查询,可以使用

或者使用谓词生成器

 var predicate = PredicateBuilder.False<Foo>();
 predicate = predicate.Or( f => f.A == 1 );
 if (allowB)
 {
    predicate = predicate.Or( f => f.B == 1 );
 }

 var query = collection.Where( predicate );
var predicate=PredicateBuilder.False();
谓词=谓词或(f=>f.A==1);
if(allowB)
{
谓词=谓词或(f=>f.B==1);
}
var query=collection.Where(谓词);
在您的
.Where()
调用中,使用标准的布尔“或”运算符
|

var query = items.Where(item => (item == 1 || item == 2));

Where调用所做的只是对任何您想要的内容进行布尔比较,因此您可以用任意多的条件逻辑填充它。

这是现在内置到.net中的,不确定以前是否没有。给定一个现有的Linq查询,您可以添加一个where子句,该子句接受一个字符串数组(searchString),并检查其中是否有任何字符串与要搜索的集合中的任何对象匹配。使用ToLower()可以确保在SQL查询中避免区分大小写

query.Where(i => SearchStrings.Any(s => i.ToLower().Contains(s.ToLower()));
通过将数组中的所有单词与集合的对象相匹配,可以对“and”谓词执行相同的操作

query.Where(i => SearchStrings.All(s => i.ToLower().Contains(s.ToLower()));

在本例中,i与集合中的每个对象相关,s与SearchStrings数组中的每个字符串相关。

如果您不知道参数计数,可以使用以下方法:

样本数据

var parameters= new List<string>{"a","d"};
var sampledata = new Dictionary<string,string>();
    sampledata["a"] = "A";
    sampledata["b"] = "B";
    sampledata["c"] = "C";
    sampledata["d"] = "D";

我假设你知道如何使用
|
并且想要动态的东西,比如
a=a.where(hour=>hour-hour>6)。您可能想说得更清楚一些……这非常有效,因为我需要构建我的或取决于传入参数的值——太棒了!很酷。遗憾的是,它没有作为标准函数包含在.NET中。非常好的实现,尽管可能没有注意到,这只适用于C#5+。我相信您必须
。编译
谓词,然后才能将其传递到
。其中
?请注意,“Any”不能由EF提供程序翻译,将在本地进行计算,从而导致完整的表扫描和内存过滤。
query.Where(i => SearchStrings.All(s => i.ToLower().Contains(s.ToLower()));
var parameters= new List<string>{"a","d"};
var sampledata = new Dictionary<string,string>();
    sampledata["a"] = "A";
    sampledata["b"] = "B";
    sampledata["c"] = "C";
    sampledata["d"] = "D";
var query = sampledata.AsQueryable();
var firstItemKey = sampledata.FirstOrDefault().Key;
var queryresult= sampledata.Where(x => x.Key == firstItemKey).AsQueryable();
foreach (var parameter in parameters.Skip(1))
{
    queryresult=queryresult.Concat(query.Where(x => x.Key == parameter));
}
var result = queryresult.ToList();