C#Entity To Linq Expression错误

时间:2017-12-13 23:03:54

标签: c# entity-framework linq

我不明白为什么会收到此错误:

从范围''引用的'someEntity'类型的

'变量'c',但未定义'。

这是我正在尝试执行的代码。 似乎它抱怨参数值c.Id我传递给IsNicePredicate方法,但我似乎无法理解为什么。

    var result =  _dbContext.Set<SomeEntity>().Select(c => new SomeEntityDto
    {
        BlahBlah = c.BlahBlah,
        Hello = _dbContext.Set<Entity>().Where(IsNicePredicate(c.Id)).ToList(),
        XXX = c.XXX,
        YYY = c.YYY
    });


    private Expression<Func<Entity, bool>> IsNicePredicate(int collateralId)
    {
        Console.WriteLine();
        return e => e.AnotherEntity.Any(x => x.Good && x.Bye == collateralId);
    }

2 个答案:

答案 0 :(得分:0)

EF将把你的代码翻译成SQL。所以lambda作为Select的主体不是直接执行,而是解释和翻译。

我认为您需要使用LINQKit或尝试在查询中手动放置IsNicePredicate的正文,看看是否有效。

我认为你需要这样使用它:

var result =  _dbContext.Set<SomeEntity>().AsExpandable().Select(c => new SomeEntityDto
    {
        BlahBlah = c.BlahBlah,
        Hello = _dbContext.Set<Entity>().Where(IsNicePredicate(c.Id)).ToList(),
        XXX = c.XXX,
        YYY = c.YYY
    });

由于您正在嵌套单独的查询,我不确定您是否需要其他AsExpandable()

Hello = _dbContext.Set<Entity>().AsExpandable().Where(IsNicePredicate(c.Id)).ToList()

答案 1 :(得分:0)

你能尝试这样的事吗?

 var result =  _dbContext.Set<SomeEntity>()
    .Select(c => new { c, Hello = _dbContext.Set<Entity>().Where(e => e.AnotherEntity.Any(x => x.Good && x.Bye == c.Id)).ToList() })
    .Select(ch => new SomeEntityDto
    {
        BlahBlah = ch.c.BlahBlah,
        Hello = ch.Hello,
        XXX = ch.c.XXX,
        YYY = ch.c.YYY
    });