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

问题描述 投票:0回答:1

如何在 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);
c# linq dynamic entity-framework-core system.linq.dynamic
1个回答
0
投票

回答您的一堆问题,以帮助您完成今年的工作。

  1. 是否可以将 lambda 函数转换为字符串以在 system.linq.dynamic.core 表达式中使用

  2. 如何将 Func 转换为表达式>

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;
    }
}

回答以下评论:

但是为了检查它最后是否不可枚举,我收到错误“给定的‘IQueryable’不支持生成查询字符串。”当我想将查询转换为ToQueryString()

扩展方法

ToQueryString()
仅当
IQueryable
DbSet
开始时才能调用,不适用于从
IQueryable
通过调用
IEnumerable
创建的
AsQueryable()
。这些
IQueryable
具有不同的
Provider
并且
ToQueryString()
期望该提供商是特定的 EF Core 提供商。

© www.soinside.com 2019 - 2024. All rights reserved.