我有这个linq to sql查询:
var items =
from i in context.Items
orderby i.itemId descending
select new ItemWithCategories
{
item = i,
categories = (
from cats in context.categories
join ic in context.itemCategories
on cats.categoryId equals ic.categoryId
where ic.itemId == i.itemId
select cats).ToList()
};
这是三张桌子。我需要将这些类别与项目联系起来,但中间有一个表格(多对多)。有没有更好的查询?
答案 0 :(得分:1)
这会产生相同的结果,但更容易阅读:
var items =
from item in context.Items
orderby item.itemId descending
select new ItemWithCategories
{
item = item,
categories = (
from itemCategory in item.itemCategories
select itemCategory.category).ToList()
};
了解我如何移除连接语句,但使用itemCategories
的{{1}}属性?
答案 1 :(得分:0)
您拥有的查询将创建一个对象列表,这些对象将引用查询(类别),这些查询将在访问时执行(如果它们完全存在)。
这可能会导致客户端和数据库服务器之间出现大量“喋喋不休”,以及在TDS流中重复发送标头数据的额外开销。
您可能需要考虑在此处执行连接并展平数据。它只需要一次查找,代价是复制左侧的数据(项目)。
当然,任何优化,关键是测试,测试,测试。