【发布时间】:2019-11-22 06:15:40
【问题描述】:
我想在我的 LINQ 查询中动态添加 where 子句。我有过滤器属性名称和过滤器属性值,所以我需要构建这样的东西:
var assignmentListQuery = context.Assignments;
if (!string.IsNullOrWhiteSpace(bookingStep.FilterPropertyName) && !string.IsNullOrWhiteSpace(bookingStep.FilterPropertyValue))
{
assignmentListQuery = assignmentListQuery.Where(item => PROPERTYNAME == PROPERTYVALUE)
}
ar assignmentList = await assignmentListQuery.ToListAsync();
我试图获取该属性的属性信息,这对我来说似乎不是。
var item = context.Set<Assignment>().First();
object value = item.GetType().GetProperty(bookingStep.FilterPropertyName).GetValue(item, null);
有人知道如何创建这种 where 子句吗?
public class Assignment
{
/// <summary>
///
/// </summary>
[Display(Name = nameof(Id))]
public int Id { get; set; }
/// <summary>
///
/// </summary>
[Display(Name = nameof(OrderNumber))]
public string OrderNumber { get; set; }
/// <summary>
///
/// </summary>
[Display(Name = nameof(ScheduledLoading))]
public DateTime ScheduledLoading { get; set; }
/// <summary>
///
/// </summary>
[Display(Name = nameof(CustomerOrderNumber))]
public string CustomerOrderNumber { get; set; }
/// <summary>
///
/// </summary>
[Display(Name = nameof(ArticleNumber))]
public string ArticleNumber { get; set; }
/// <summary>
///
/// </summary>
[Display(Name = nameof(Comment))]
public string Comment { get; set; }
[Display(Name = nameof(CustomerId))]
public int? CustomerId { get; set; }
[Display(Name = nameof(Customer))]
public virtual Customer Customer { get; set; }
}
这是分配实体,FilterPropertyName 是例如"客户订单号"
【问题讨论】:
-
贴出
Assignment的代码,以及你正在使用的bookingStep.FilterPropertyName的值。 -
一般来说,您需要退回到使用
Expression类上的方法构造表达式。 -
这是关于动态 LINQ 和今天在哪里的第四个问题。你们是课程的一部分还是什么?无论如何,有很多重复的问题,可以追溯到几年前。
-
docs.microsoft.com/en-us/dotnet/csharp/programming-guide/… + "c# 动态 where 子句" 在你最喜欢的搜索引擎中
-
Where需要Expression<Func<TEntity,bool>>。有许多重复的问题展示了如何构建一个。大多数时候,尽管根据某些条件将不同的.Where()调用附加到查询中会更容易,例如if (useCustomer) {query=query.Where(item=>item.Customer == value);}
标签: c# reflection ef-core-2.2