0

我正在使用 EntityFramework 核心和 .net 核心 3.1。目前我遇到的情况是,我想在以下查询的 Linq where 子句中使用表达式。我创建如下,

private Func<Entity1, bool> GetValidName()    
{
        return x => !string.IsNullOrEmpty(x.Name) && x.Name.ToLower() != "none";
}

并将其分配给表达式变量

var ValidNameXpression = this.GetValidName();

并在下面的查询中使用它。我需要加入两个实体,但 entity1 记录应该在加入之前使用某些条件进行过滤,这就是用 Func 编写的内容并创建了一个表达式变量。

  var EntityResponseList= await this._app1DbContext.Entity1.Where(ValidNameXpression ).Join(
                this._app2DbContext.Entity2.Where(x => x.Entity1Id == Entity2Id),
                af => af.Id,
                pr => pr.Id,
                (af, pr) => new ResponseEntity
                {
                    Name = af.Name ?? NotAvailable,
                    IsAvailable = af.IsAvailable,
                }).ToListAsync().ConfigureAwait(false);

现在的问题是当我使用表达式 (ValidNameXpression) 时,我得到的 IEnumerable 不包含 ToListAsync() 的定义。但是当我用实际的 contition (x => !string.IsNullOrEmpty(x.Name) && x.Name.ToLower() != "none") 直接替换表达式时它可以工作!

我不明白,你能帮我为什么会出现这种行为,我该如何解决?

注意:接收到 Requiremtn 以使用函数/表达式为 where 子句中使用的过滤逻辑提供有意义的名称。

4

0 回答 0