转换Linq语句以在抽象存储库模式中使用

时间:2016-03-16 02:23:35

标签: c# linq lambda repository-pattern

除了我意识到我需要使用存储库和工作单元之外,这个Linq语句完美无缺......

所以我有这个Linq查询

var query = (from rg in ReportGroups  
                join rd in ReportDefinitions on rg.ReportGroupID equals rd.ReportGroupID
                where rd.ReportGroupID == 5
                select rg).Count(); 

我所看到的是

  1. ReportGroups使用GetReportGroups(对于GetAll())
  2. ReportDefinitions使用GetReportDefinitions(对于GetAll())
  3. 所以一个例子是

     object responseObject = null;
     responseObject = _reportService.GetReportGroups("en-us").ToList();
     responseObject = _reportService.GetReportDefinitions("en-us").Where(e => e.ReportGroupID == Convert.ToInt32(id)).ToList();
    

    所以你可以看到我目前正在检索数据的方式。

    我想加入,但我不知道如何做到这一点。

    我在想多个电话,很多是for循环...

    我还注意到如何使用lambda语句

    在另一个方法中调用现有服务
    private IEnumerable<SelectListItem> GetActivityList()
        {
            return _activityService
                .GetAllActivities()
                .OrderBy(n => n.ActivityName)
                .Select(a => new SelectListItem
                             {
                                 Text = a.ActivityName,
                                 Value = a.Id.ToString(CultureInfo.InvariantCulture)
                             });
        }
    

    我意识到人们无法看到所有底层数据抽象,我当然可以提供任何问题,我只是有点难过,因为我使用Linqpad连接到数据库并编写了我的查询,但现在我意识到加入等等。服务层可能不那么容易。

1 个答案:

答案 0 :(得分:0)

  return DbSet.Include(x => x.ReportGroups  )
            .Include(x => x.ReportDefinitions ).Where(//id condition);