“或”等效于Linq Where()lambda表达式

时间:2010-01-20 13:16:27

标签: .net linq where-clause

Linq中是否有一个方法可用于构建SQL字符串,例如“... where(a = 1)OR(a = 2)”?

7 个答案:

答案 0 :(得分:172)

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

 var query = collection.Where( c => c.A == 1 || c.B == 2 );

或使用PredicateBuilder

 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 );

答案 1 :(得分:23)

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

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

答案 2 :(得分:18)

您使用与普通C#===&gt;中相同的所有运算符||为“或”&amp;&amp;为“和”等。

var something = from s in mycollection
                where s.something == 32 || 
                      s.somethingelse == 45 
                select s

答案 3 :(得分:4)

答案 4 :(得分:1)

.Where()来电中

使用标准布尔'或'运算符||

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

所有Where调用都是对你想要的任何东西的布尔比较,所以你可以用你希望的条件逻辑填充它。

答案 5 :(得分:1)

如果你没有&#39;知道参数计数,你可以使用这个:

样本数据

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();

答案 6 :(得分:0)

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

addClap: function () {
    this.setState({clap: this.state.clap + 1, now: this.state.now + 1});

    return setTimeout(() => {
        return sendClaps(this.props.item.url, this.state.now);
    }, 3000);
}

对于&#39;和&#39;你可以做同样的事情。谓词通过将数组中的所有单词与集合的对象进行匹配。

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

在此示例中,我与集合中的每个对象相关联,并且s与SearchStrings数组中的每个字符串相关。