当值的数量是动态时,查询OR条件

时间:2013-07-26 09:01:54

标签: linq

如何在查询中动态添加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);    
}  

1 个答案:

答案 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));