如何在查询中动态添加OR条件。代码使用EF5.0,LINQ,MVC4.0和存储库模式。
public ActionResult Index()
{
var model = new AssignedSearchFields(); //ViewModel
List<LClient.Model.Attribute> allFields = Common.GetAssignedSearchFields(User.Identity.Name, userID, "EntityType Name 1");
model.SearchFields = allFields; // List allFields having dynamic number of items.
model.Entities = entityRepository.GetMany(e => e.EntityTypeID == 1 && e.InstanceID <= 10 && (e.AttributeID == 1 || e.AttributeID == 2 || e.AttributeID == 3 || e.AttributeID == 4)); // Here I want to use AttributeID dynamically without OR conditions.
return View(model);
}
答案 0 :(得分:1)
我不确定在这种情况下你需要PredicateBuilder
Contains
就足够了。
var dynamicIds = new[]{1, 2, 3, 4};
//or something like that, if you want values coming from 'GetAssignedSearchFields'
var dynamicIds = Common.GetAssignedSearchFields(User.Identity.Name, userID, "EntityType Name 1")
.Select(m => m.Id);
//xxx
model.Entities = entityRepository.GetMany(e =>
e.EntityTypeID == 1 &&
e.InstanceID <= 10
&& (dynamicIds.Contains(e.AttributeID));