如果某些变量有一些值,我需要提取一些记录。
例如,如果状态> 0,我需要过滤结果,如:
where object.id=status
否则,如果status = 0,我需要删除where where子句并返回所有元素。我会摆脱:
if(status>0)
do a linq query with the where clauses
else
do a link query with that where clauses
代码太多,因为要检查的变量可能超过4-5。
是否可以在LINQ上“注入”一种字符串? (所以我可以创建我的字符串并将其传递给LINQ)。
我的意思是:
string myQuery="";
if(status>0)
myQuery="where object.id=status";
else
myQuery="";
有可能吗? (经典的mysql行为)。
答案 0 :(得分:8)
由于LINQ很懒,你可以做到
var query = ...
if (status > 0)
{
query = query.Where(o => o.id == status);
}
答案 1 :(得分:3)
您可以建立如下查询:
IEnumerable<MyEntity> results = MyEntityContext.MyEntities;
if (status > 0)
results = results.Where(e => e.id == status);
这有帮助吗?
答案 2 :(得分:3)
可以使用Dynamic LINQ,请参阅ScottGu的博客文章: Dynamic LINQ (Part 1: Using the LINQ Dynamic Query Library)
答案 3 :(得分:2)
你可以这样做:
var query = database.MyTable.Where(/* where for all records */);
if (status > 0) {
query = query.Where(o => o.id == status);
}
Linq(对于sql和EF)非常聪明,可以合并where条件并将一条SQL语句发送到数据库。
答案 4 :(得分:1)
可以使用动态linq - 请参阅How to create LINQ Query from string?
我的回答链接到Scott Gu的帖子和Microsoft的示例代码 - http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx
答案 5 :(得分:1)
您可以写下以下内容
IQueryable<T> query = dbContext.SomeObjectSet;
if (condition1) {
query = query.Where(...)
}
if (condition2) {
query = query.Where(...)
}
但是,您要查询所有实体,之后可以使用LINQ to SQL
在内存中进行过滤答案 6 :(得分:1)
AFAIK,您需要有2个不同的查询。
if(status > 0)
{
var myquery = From ....
where object.id = status
}
else
{
var myquery = From ..
}
答案 7 :(得分:1)
另一种选择:query.Where(x=>(status>0? x.id==status : 1==1))
答案 8 :(得分:1)
您是否尝试进行条件LINQ查询?如果是这样可能会有所帮助
var nums = new List<int>() { 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4 };
bool getOdd = true;
var query = nums.AsQueryable();
if (getOdd) {
query = query.Where(i => i == 1 || i == 3);
} else {
query = query.Where(i => i == 2 || i == 4);
}
var result = query.ToList();