【问题标题】:How many SQL Queries will be executed in the database through this EF通过这个 EF 会在数据库中执行多少 SQL 查询
【发布时间】:2020-11-16 14:02:02
【问题描述】:

我有以下内容,想知道通过这个 EF 会在 DB 中执行多少查询?

private static dbContext dbc = new ProfileDBC();

private static IQueryable<Profile> GetProfile()
{
  return dbc.Profiles;
}


private static IQueryable<Purchase> GetPurchases()
{
  return from a in dbc.Amount
            where a.IsPurchased
            select a;
}

static void Main (string[] args)
{
   var result = (from p in GetProfile()
                  join pa in GetPurchases()
                  on p.ID equals pa.ID
                  group p.total by pa into r
                  select new { r.name, totalpurchase = r.Sum( p=> p)});.ToList(); }
}

}

【问题讨论】:

  • 可能有 1 个查询...你为什么不检查一下?
  • @TheGeneral:谢谢,我也想,但想确认一下
  • @TheGeneral:我是新人,请问如何查看?
  • 问题应该是,如何调试和分析
  • 最可靠的方法是 sql server profiler,这样你就可以看到 server 看到了什么

标签: c# sql database entity-framework linq


【解决方案1】:

在您解决编译器错误后,这将是一个查询:

Sum( p=> p)});.ToList();

如果您想获取带有子项目的项目,例如带有学生的学校、带有订单的客户或带有购买的个人资料,请考虑使用 GroupJoin 而不是 Join 后跟 GroupBy。好消息是您还将获得没有购买的配置文件:

var profilesWithTheirPurchases = dbContext.Profiles.GroupJoin(dbContext.Purchases,

    // parameter KeySelector: compare primary and foreign key:
    profile => profile.Id,           // from every Profile take the Id
    purchase => purchase.ProfileId,  // from every Purchase take the ProfileId

    // parameter resultSelector: take every Profile with its zero or more Purchases
    // to make one new
    (profile, purchasesOfThisProfile) => new
    {
         Name = profile.Name,
         TotalPurchases = purchasesOfThisId.Select(purchase => purchase.Amount)
                                           .Sum(),
    });
         

【讨论】:

  • 我不太懂技术性的东西,哈哈,但是你花了这么多精力写下来,我读到了,很有帮助....所以给你打勾:) :) 谢谢 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-14
  • 1970-01-01
  • 2016-01-20
  • 1970-01-01
  • 2016-03-12
相关资源
最近更新 更多