我试图编写一个LINQ查询,以根据某些连接获取结果,但我不确定如何正确编写它
这是我的课
public class Result
{
public Response Response { get; set; }
public IEnumerable<Item> Items { get; set; }
}
public class Response
{
public TableA TableA { get; set; }
//other properties
}
public class TableA
{
public IEnumerable<ItemA> ListA { get; set; }
//other properties
}
我正在尝试编写LINQ查询
var query = from tableA in _context.Set<TableA>().Where(t => t.Id == id).Include(t => t.ListA)
//some joins with other tables
// ....
from itemA in tableA.ListA
join itemB in _context.Set<TableB>() on itemA.Id equals itemB.Id into items
select new Result
{
Response = new Response
{
TableA = tableA,
//other properties from different joins
},
Items = items.AsEnumerable()
};
上一个查询返回以下错误
无法转换。请以可以转换的形式重写查询,或者通过插入对“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的调用来显式切换到客户端计算。
当我尝试将前一个查询划分为两个查询时,它按预期工作
var query1 = from tableA in _context.Set<TableA>().Where(t => t.Id == id).Include(t => t.ListA)
//some joins with other tables
// ....
select new Result
{
Response = new Response
{
TableA = tableA,
//other properties from different joins
},
};
var query2 = from itemA in query1.FirstOrDefault().Response.TableA.ListA
join itemB in _context.Set<TableB>() on itemA.Id equals itemB.Id into items
from item in items.DefaultIfEmpty()
select item;
var result = new Result()
{
Response = query1.FirstOrDefault().Response,
Items = query2
};
我想知道第一个查询有什么问题,如果可能的话,如何在不将其分成两个查询的情况下编写它?
先谢了
1条答案
按热度按时间ejk8hzay1#
我认为错误来自
from itemA in tableA.ListA
这一部分。我不知道如何将其转换为SQL。我理解的原因是,您希望检索tableA行及其itemA和itemB。一种解决方案是从如下子查询中检索itemB:
生成的SQL: