我不明白为什么会收到此错误:
从范围''引用的'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);
}
答案 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
});