【发布时间】:2014-09-23 23:55:22
【问题描述】:
我有两张桌子:
发票(InvoiceID、InvoiceNumber)
Invoices_Products(InvoiceID、ProductID、IsFinalized)
我显示了所有发票的列表,并且有一些按钮可以按“已确定”或“未确定”发票进行过滤。最终发票上的每个产品都是IsFinalized==true。
目前我有以下代码,它的执行速度很慢:
IEnumerable<Invoice> invoices = db.Invoices;
if (isFinalized) // filter by finalized invoices
{
List<Invoice> unfinalizedInvoices = new List<Invoice>();
foreach (var invoice in invoices)
{
int invoicesProductsCountTotal = db.Invoices_Products.Where(l => l.InvoiceID == invoice.InvoiceID).Count();
int invoicesProductsCountFinalized = db.Invoices_Products.Where(l => l.InvoiceID == invoice.InvoiceID && l.IsFinalized == true).Count();
if (invoicesProductsCountTotal != invoicesProductsCountFinalized)
{
unfinalizedInvoices.Add(invoice);
}
}
invoices = invoices.Except(unfinalizedInvoices);
}
else
{
List<Invoice> finalizedInvoices = new List<Invoice>();
foreach (var invoice in invoices)
{
int invoicesProductsCountTotal = db.Invoices_Products.Where(l => l.InvoiceID == invoice.InvoiceID).Count();
int invoicesProductsCountFinalized = db.Invoices_Products.Where(l => l.InvoiceID == invoice.InvoiceID && l.IsFinalized == true).Count();
if (invoicesProductsCountTotal == invoicesProductsCountFinalized && invoicesProductsCountFinalized > 0)
{
finalizedInvoices.Add(invoice);
}
}
invoices = invoices.Except(finalizedInvoices);
}
我意识到这不是最佳的,但我喜欢展开我的 LINQ,以便我可以阅读和理解它。
我的问题:有什么方法可以让这个查询更快地使用.All 或 .Any 什么的,或者我是否需要重新考虑我的数据库设计(可能在 Invoices 表中添加一个额外的列)
编辑:第三张表是Products(ProductID,ProductNumber),但你知道
【问题讨论】:
标签: c# performance linq