我想使LINQ查询动态的where子句

时间:2015-08-27 12:49:53

标签: c# linq c#-4.0 azure-storage

我想让课程动态化。当有人调用此函数时,我不知道参数和比较运算符的总数(例如,等于,等等)和字段名称。我怎样才能实现这一点?

在这个例子中,我使用了三个参数。 “PartitionKey”,“RowKey”和tableName.It可以是0或任何数字,也可以是“FirtName”,“Age”等

public void Persons(string whereClauseParameters)
{            
    var query = (from p in cloudTable.CreateQuery<CustomTableEntity>()
                  where p.PartitionKey == "" && p.RowKey != "" && p.TableName == ""
                  select p);
}

3 个答案:

答案 0 :(得分:0)

听起来你正在寻找像Dynamic Linq这样的东西。这允许您执行以下查询:

var query = northwind.Products
                         .Where("CategoryID = 3 AND UnitPrice > 3")
                         .OrderBy("SupplierID");

其中字段可以指定为动态字符串,而不是&#39;硬编码&#39;。

答案 1 :(得分:0)

这样的东西?

public void Persons(Predicate<Person> pred)
{
    var query = from p in cloudTable.CreateQuery<CustomTableEntity>()
                where pred(p)
                select p;
}   

答案 2 :(得分:0)

您可以动态地向查询添加条件。例如:

public void Persons(string firstName, string lastName, int? age) {            

  var query = loudTable.CreateQuery<CustomTableEntity>();

  if (firstName != null) {
    query = query.Where(p => p.FirstName == firstName);
  }

  if (lastName != null) {
    query = query.Where(p => p.LastName == lastName);
  }

  if (age.HasValue) {
    query = query.Where(p => p.Age == age.Value);
  }

  // then use the query

}