如何加速linq查询C#

How to speed up linq query C#

我的 linq 查询需要 30 秒到 60 秒来执行。

如何编写才能更快地工作?

  var result = (from Produkt in _dbContext.Produkt.AsNoTracking()
                      join ProdlagerT in _dbContext.ProdlagerT.AsNoTracking() on new { X1 = Produkt.Nummer, X2 = Produkt.Lagerplacering } equals new { X1 = ProdlagerT.Produktnr, X2 = ProdlagerT.Lagerplats } into gj
                      from subpet in gj.DefaultIfEmpty()
                      join Ordrad in _dbContext.Ordrad.AsNoTracking() on Produkt.Nummer equals Ordrad.Produktnr
                      select new PlacesToFill
                      {
                          amount = subpet.Lagersaldo,
                          description = Produkt.Benämning,
                          prodNmbr = Produkt.Nummer,
                          place = Produkt.Lagerplacering
                      }).ToList();// tog bort Distinct


        result = result.Distinct().ToList();

正如其他用户所说,这可能取决于您的数据库结构。稍作改进应该是这样的:

var result = (from Produkt in _dbContext.Produkt.AsNoTracking()
              join ProdlagerT in _dbContext.ProdlagerT.AsNoTracking() on new { X1 = Produkt.Nummer, X2 = Produkt.Lagerplacering } equals new { X1 = ProdlagerT.Produktnr, X2 = ProdlagerT.Lagerplats } into gj
              from subpet in gj.DefaultIfEmpty()
              join Ordrad in _dbContext.Ordrad.AsNoTracking() on Produkt.Nummer equals Ordrad.Produktnr
              select new PlacesToFill
                  {
                      amount = subpet.Lagersaldo,
                      description = Produkt.Benämning,
                      prodNmbr = Produkt.Nummer,
                      place = Produkt.Lagerplacering
                  });

// here you can see the query
var listResult = result.Distinct().ToList();

通过删除第一个查询中的 ToList(),您应该可以节省一些时间。 您可以尝试节省更多时间分析这些要点:

  • 你要多少行?
  • 您是在查询数据库表还是视图?
  • 除了使用 Distinct,您还有其他选择吗?