【问题标题】:I want to make where clause of LINQ query dynamic我想让 LINQ 查询的 where 子句动态化
【发布时间】:2015-11-21 20:44:54
【问题描述】:
我想让 where 类动态化。当有人调用这个函数时,我不知道参数和比较运算符(例如等于、大于等)和字段名称的总数。我该如何实现呢?
在这个例子中,我使用了三个参数。 “PartitionKey”、“RowKey”和tableName。可以是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);
}
【问题讨论】:
标签:
c#
linq
c#-4.0
azure-storage
【解决方案1】:
听起来您正在寻找类似Dynamic Linq 的东西。这允许您执行以下查询:
var query = northwind.Products
.Where("CategoryID = 3 AND UnitPrice > 3")
.OrderBy("SupplierID");
可以将字段指定为动态字符串,而不是“硬编码”。
【解决方案2】:
这样的?
public void Persons(Predicate<Person> pred)
{
var query = from p in cloudTable.CreateQuery<CustomTableEntity>()
where pred(p)
select p;
}
【解决方案3】:
您可以动态地向查询添加条件。示例:
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
}