C# 如何改进我的LINQ以下查询?

C# 如何改进我的LINQ以下查询?,c#,sql-server,linq,C#,Sql Server,Linq,如何改进我的低于LINQ的查询以获得更好的性能。写这篇文章最好的方法是什么: result = (from cd in dataContext.vRetailerWeeks where cd.MasterTrackingGroupID == masterTrackingGroupId && cd.RetailerWeek <= (from cd1 in dataContext.vCalendarDates

如何改进我的低于LINQ的查询以获得更好的性能。写这篇文章最好的方法是什么:

result = (from cd in dataContext.vRetailerWeeks
          where cd.MasterTrackingGroupID == masterTrackingGroupId
             && cd.RetailerWeek <= (from cd1 in dataContext.vCalendarDates
                                    where
                                        cd1.MasterTrackingGroupID == masterTrackingGroupId &&
                                        cd1.CalendarDate == retailerWeekDateTime
                                    select cd1.RetailerWeek).FirstOrDefault()
          orderby cd.RetailerWeek descending 
          select cd.RetailerWeek).Take(weekNo).ToList();
result=(来自dataContext.vRetailerWeeks中的cd
其中cd.MasterTrackingGroupID==MasterTrackingGroupID

&&cd.RetailerWeek问题是,您是否需要改进linq查询或数据库中的索引

它采用begin生成的SQL的最佳方式(使用SQL事件探查器,或从datacontext记录)

如果您对生成的SQL感到满意,则无需进一步更改linq查询,它已经完成了它的工作。因此,请在Management Studio中尝试此SQL并检查查询计划。从中可以优化索引


如果您不满意,请继续执行linq查询。

现在的性能有什么问题吗?是否需要通过调用
ToList()
来收回列表?您的瓶颈是在数据库方面还是在内存方面?如果您只想获得代码的一般反馈,可能是一个更合适的地方。我同意@skaz.ToList()第二次执行代码的时候可能不需要。此外,您可以将所有这些都放在一个存储过程中,因为您只使用一个变量(据我所知)。谢谢。我们这里有人反对使用存储过程,坚持使用LINQ。对我来说,两者都可以。在运行时,这个查询只编译成一个数据库查询,但它的LINQ看起来不太好,我想也许可以使用JOIN等来重构它。