正如主题所说,我想知道什么是更快更好的方法。

Linq 和存储库中的新方法,如 GetCourts(int clubId)

var courts =_context.Courts.Where(c=>c.ClubId==clubId)

或者使用 EF 延迟加载
var courts= _clubRepository.GetClub(clubId).Courts;

我的俱乐部实体:
public class Club :EntityBase
    {
        public string Name { get; set; }
        public virtual IList<Court> Courts { get; set; }
    }

我的法院实体:
public class Court:EntityBase
    {
       public bool IsIndoor { get; set; }

       public int ClubId { get; set; }
       public virtual Club Club { get; set; }

       public int CourtTypeId { get; set; }
       public virtual CourtType CourtType { get; set; }
    }

我不知道在我的项目中使用什么方法。

最佳答案

在您在问题中描述的用例中,使用 LINQ 查询将比使用延迟加载快得多。

这个说法:

var courts= _clubRepository.GetClub(clubId).Courts;

相当于这些语句:
var club = _clubRepository.GetClub(clubId);
var courts = club.Courts;

第一行导致发出 SQL 查询以获取带有 ClubId == clubId 的单个俱乐部。第二行导致发出另一个 SQL 查询以获取所有带有 ClubId == clubId 的法院。您进行两次查询的事实将抵消延迟加载使用 sp_executesql 带来的任何潜在好处。

另一方面,
var courts =_context.Courts.Where(c=>c.ClubId==clubId)

将导致只发出一个 SQL 查询,这将更有效率。

当然,如果内存中已经有 Club 的实例,则应该使用延迟加载来获取其相关实体,以提高效率并保持对象图的一致性。

关于c# - 延迟加载或 linq 查询?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25463603/

10-09 16:03
查看更多