如何加速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,您还有其他选择吗?
我的 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,您还有其他选择吗?