System.Linq.Dynamic.Core日期为空&日期不为空

2w2cym1i  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(112)

如何在System.Linq.Dynamic.Core中执行此Date is empty & Date is not empty,我目前正在执行此操作,但无法正常工作:

if (filter.Operator.StartsWith("is empty") ||
     filter.Operator.StartsWith("is not empty"))
 {
     filterOp = filter.Operator.StartsWith("is not") ? "!=" : "==";
     qs = $"{filter.Column.PropertyName} {filterOp} ''";
 }
 query = query.Where(qs);

字符串

relj7zay

relj7zay1#

帮你完成今年的工作。

  1. is it possible to convert lambda function to string for use in system.linq.dynamic.core expression
  2. How to convert Func<T, bool> to Expression<Func<T, bool>>
    MudBlazor已经可以构建过滤器表达式,不需要像Dynamic.LINQ这样的额外拐杖。我已经检查了这段代码,它应该可以与EF Core一起工作。
    有功能:
public static class FilterExpressionGenerator
{
    public static Expression<Func<T, bool>> GenerateExpression<T>(IFilterDefinition<T> filter, FilterOptions? filterOptions)
    ...

字符串
所以,基本上你可以通过以下方式使用这个函数:

query = query.Where(FilterExpressionGenerator.GenerateExpression<GreenPaperItem>(filter));


如果你有这些定义的列表,你可以创建一个帮助函数,将这个列表应用到任何IQueryable上。

public static class MudBlazorFilterHelper
{
    public static IQueryable<T> ApplyFilter<T>(this IQueryable<T> query, IEnumerable<IFilterDefinition<T>> filterDefinitions)
    {
        foreach(var filter in filterDefinitions)
        {
            query = query.Where(FilterExpressionGenerator.GenerateExpression<T>(filter));
        }
        return query;
    }
}


现提出以下评论:
但是为了检查它在最后是不是可查询的,当我想将查询转换为QueryString()时,我得到了错误“The given 'IQueryable' does not support generation of query strings.”
只有当DbSet启动IQueryable时才能调用扩展方法ToQueryString(),它不适用于通过调用AsQueryable()IEnumerable创建的IQueryable。这些IQueryable具有不同的ProviderToQueryString()期望此提供程序是特定的EF Core提供程序。

相关问题