2016-02-27 2 views
0

У меня есть таблица хранилища и добавить любую сделку продукции здесь, как это:Entity Framework OrderBy сумма низкая производительность

productID qty: 
103 2 
103 -1 

в представлении моих продуктов я хочу показать заказ продукции на сумму Кол продукции > 0

так что я пишу это:

dbContext.tbl_Product.OrderByDescending(n => n.tbl_repository.Sum(x => x.Qty) > 0).ThenByDescending(m => m.ID); 

но производительность это слишком медленно, есть ли другой способ сделать это быстрым?

+0

Сколько записей в этой таблице? У таблиц есть индексы на них? Как выглядит сгенерированный SQL из Entity Framework? –

+0

@ DarrenDavies есть 50000 записей в таблице репозитория, и я проиндексировал productID и qty –

ответ

0

Вы можете попытаться использовать метод GroupBy.

Сначала создайте (необязательно) класс для хранения результатов:

public class ProductGroup 
{ 
    public string ProductID { get; set; } // or int, whatever your product id's type is 
    public int QuantitySum { get; set; } 
} 

Я не уверен, как реализуется ваше хранилище, но попробуйте запрашивая контекст непосредственно первым и посмотреть, если вы получите лучшие результаты:

using (var db = new ApplicationContext()) 
{ 
    var products = db.Products 
        .GroupBy(product => product.ProductID) 
        .Where(productGroup => productGroup.Sum(p => p.Quantity) > 0) 
        .Select(productGroup => new ProductGroup { ProductID = productGroup.Key, QuantitySum = productGroup.Sum(product => product.Quantity) }) 
        .OrderByDescending(product => product.ProductID) 
        .ToList(); 

    // 'products' should be a list of ProductGroup items holding the ID and Sum. 
} 
Смежные вопросы