Linq中是否有一个方法可用于构建SQL字符串,例如“... where(a = 1)OR(a = 2)”?
答案 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)
一个解决方案可能是Dynamic Linq:
答案 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数组中的每个字符串相关。