C# 在查询中使用未映射属性:调用lambda表达式vs";“复制”;财产
我有一个ASP.NET MVC code first项目,其中有一个C# 在查询中使用未映射属性:调用lambda表达式vs";“复制”;财产,c#,entity-framework,linq,lambda,C#,Entity Framework,Linq,Lambda,我有一个ASP.NET MVC code first项目,其中有一个项表,我有很多查询需要按项的属性进行筛选或排序。 以下是包含数据库列的(简化)分部类: public partial class Item { public Item() { this.Squares = new HashSet<Square>(); this.Sales = new HashSet<Sale>(); } public Gu
项
表,我有很多查询需要按项的属性进行筛选或排序。以下是包含数据库列的(简化)分部类:
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; }
}
我想我可以使用ToList()
在查询中直接使用UsedQuantity
和availableequantity
属性,但我希望在性能问题上避免这种情况。因此,我认为我需要为我的查询创建类似的内容:
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)
);
}
public静态表达式getAvailableEquality()
{
返回i=>i.数量-
(
(i.Squares.Any()?i.Squares.Count:0)+
(i.Sales.Any()?i.Sales.Sum(s=>s.Quantity):0)
);
}
但这在某种程度上“复制”了另一个项
分部类中的可用性
属性,这意味着用于筛选或排序的每个属性也应该复制
我读到我可以
调用
lambda表达式来检索一个特定实例的结果,那么我应该从functional partial类调用表达式,这样代码就不会重复了吗?是否存在任何性能问题?我应该保留重复的属性吗?或者任何其他允许在查询中使用这些未映射属性而不会出现性能问题的解决方案?您使用的是实体框架吗?请添加更详细的标签!对不起,是的,我实际使用的是EF;)
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)
);
}