[英]LINQ dynamic query for entity framework
我有两个Guid集合:
List<Guid> statuses;
List<Guid> priorities;
如何进行以下查询:
var result = context.Activity.Where(a =>
(a.StatusID == statuses[0] || a.StatusID == statuses[1] || ... || a.StatusID == statuses[n]) &&
(a.PriorityID == priorities[0] || a.PriorityID == priorities[1] || ... || a.PriorityID == priorities[m]))
集合可能为空,在这种情况下,我们不应该添加适当的“ AND”条件。 怎样做这样的动态查询?
更新
嗯,想象一下我需要这样的东西:
List<Func<Activity, bool>> conds = new List<Func<Activity, bool>>();
var result = context.Activity.Where(conds[0] || (conds[1] && conds[2]))
怎么做?
根据问题的第一个答案
仅选择StatusID
处于statusses
且PriorityID
处于priorities
PriorityID
那些Activity
对象。 显然,如果集合为空,则所有Activity
对象都不符合条件。
var result = context.Activity.Where(a =>
statuses.Contains(a.StatusID) && priorities.Contains(a.PriorityID));
基于@Don Tomato的评论的替代答案
根据您提出问题的方式一定存在误解。 但是,我认为您想要的是根据需要向IQueryable
添加条件。
List<Func<Activity, bool>> conditions = new List<Func<Activity, bool>>();
// add conditions to the list
// for eaxmple:
// conditions.add(a => statuses.Contains(a.StatusID));
// or
// conditions.add(a => a.Name == "Don Tomato");
IQueryable query = context.Activity.AsQueryable();
foreach (Func<Activity, bool> condition in conditions)
query = query.Where(condition);
List<Activity> result = query.ToList();
您可以像这样将where子句链接在一起,最终结果是将它们合并在一起:
var query = context.Activity.Where(o => <condition1>);
if (2ndconditionrequired)
{
query = query.where(o => <condition2>);
}
query.ToList();
您也可以这样:
var result = context.Activity;
if (statuses != null && statuses.Count > 0)
{
result = results.Where(a =>
a.StatusID == statuses[0] || a.StatusID == statuses[1] || ... || a.StatusID == statuses[n];
}
if (priorities != null && priorities.Count > 0)
{
result = results.Where(a =>
a.PriorityID == priorities[0] || a.PriorityID == priorities[1] || ... || a.PriorityID == priorities[m]);
}
result.ToList(); // The query won't be executed until here.
但是我想您真正想要做的就是@Bazzz回答。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.