#c# #entity-framework #linq #lambda
#c# #entity-framework #linq #лямбда
Вопрос:
У меня есть ASP.NET Первый проект кода MVC с Item
таблицей, и у меня есть много запросов, в которых мне нужно фильтровать или упорядочивать по свойствам элементов.
Вот (упрощенный) частичный класс, содержащий столбцы базы данных:
public partial class Item
{
public Item()
{
this.Squares = new HashSet<Square>();
this.Sales = new HashSet<Sale>();
}
public Guid Id { get; set; }
public int Quantity { get; set; }
[InverseProperty("Item")]
public virtual ICollection<Square> Squares { get; set; }
[InverseProperty("Item")]
public virtual ICollection<Sale> Sales { get; set; }
}
И вот (упрощенный) связанный частичный класс, содержащий функциональные свойства:
public partial class Item
{
public int UsedQuantity
{
get
{
var nbUsedInDomain = Squares != null ? Squares.Count() : 0;
var nbForSale = Sales != null ? Sales.Sum(s => s.Quantity) : 0;
return nbUsedInDomain nbForSale;
}
}
public int AvailableQuantity
{
get { return Quantity - UsedQuantity; }
}
}
Я думаю, что мог бы использовать свойства UsedQuantity
и AvailableQuantity
непосредственно в своих запросах, используя ToList()
но я хотел бы избежать этого из-за проблем с производительностью.
Таким образом, я думаю, мне нужно было бы создать что-то подобное для моих запросов:
public static Expression<Func<Item, int>> GetAvailableQuantity()
{
return i => i.Quantity -
(
(i.Squares.Any() ? i.Squares.Count : 0)
(i.Sales.Any() ? i.Sales.Sum(s => s.Quantity) : 0)
);
}
Но это каким-то образом «дублирует» AvailableQuantity
свойство в другом Item
частичном классе, и это означало бы, что каждое свойство, используемое для фильтрации или сортировки, также должно дублироваться.
Я читал, что могу Invoke
с помощью лямбда-выражения получить результат для одного конкретного экземпляра, так должен ли я вызывать выражение из функционального частичного класса, чтобы код не дублировался? Есть ли какие-либо проблемы с производительностью? Должен ли я сохранять дублированные свойства? Или любое другое решение, позволяющее использовать эти не сопоставленные свойства в запросе без проблем с производительностью?
Комментарии:
1. Используете ли вы entity Framework? Пожалуйста, добавьте более подробные теги!
2. Извините, да, я на самом деле использую EF 😉