Jus*_*ren 4 c# linq linq-to-entities linq-to-sql
这是我想要生成的伪SQL:
SELECT * FROM Table WHERE Column1 = @Value1 OR Column2 = @Value2
Run Code Online (Sandbox Code Playgroud)
问题是,有时不应包括第二个.我希望将这些.Where()条款链接在一起:
var query = context.TableName;
query = query.Where(t => t.Column1 == value1);
if (NeedsToBeIncluded(value2))
query = query.Where(t => t.Column2 == value2);
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用. 如果你.Where()将AND它们链接在一起默认会发出一个.有没有办法让它发出OR?
我正在寻找以下内容:
var query = context.TableName;
query = query.Where(t => t.Column1 == value1);
if (NeedsToBeIncluded(value2))
query = query.OrWhere(t => t.Column2 == value2);
Run Code Online (Sandbox Code Playgroud)
更新
好的,所以我上面列出的例子太简单了.它只是一个概述问题空间的例子.可以说,"在野外",Column1和Column2实际上可能是"CarType"和"OwnerName",也许还有更多,也许还有更少.我只是用一个简单的例子来概述问题,因为我希望用这个链接来解决一系列域问题.Where().
Cra*_*ntz 10
一种方法是使用LINQKit的PredicateBuilder.
另一种方法是使用列表:
var values = new List<string> { value1 };
if (NeedsToBeIncluded(value2)) values.Add(value2);
query = context.TableName.Where(t => values.Contains(t));
Run Code Online (Sandbox Code Playgroud)
PB更灵活,但列表将解决您问题中的问题.请注意,您需要EF 4 Contains.