C# 自定义选择器表达式
我有以下简单的场景。我有一个Customer类,它在我的edmx中定义。我还有一个Order类,客户可以通过其Orders属性拥有零个或多个订单 我在Customer类中定义了OrderCount属性,如下所示:C# 自定义选择器表达式,c#,.net,entity-framework,C#,.net,Entity Framework,我有以下简单的场景。我有一个Customer类,它在我的edmx中定义。我还有一个Order类,客户可以通过其Orders属性拥有零个或多个订单 我在Customer类中定义了OrderCount属性,如下所示: public partial class Customer { public int OrderCount { get; set; } } 我想简单地编写Select查询,适当地加载这个OrderCount的值。我在Customer类中尝试过这样做: public parti
public partial class Customer
{
public int OrderCount { get; set; }
}
我想简单地编写Select查询,适当地加载这个OrderCount的值。我在Customer类中尝试过这样做:
public partial class Customer
{
public int OrderCount { get; set; }
public static Expression<Func<Customer, Customer>> DetailSelector = c =>
{
c.OrderCount = c.Orders.Count;
return c;
};
}
但是,这样我会得到一个错误,即带有语句体的lambda不能转换为表达式。
然后我试着这样做:
public partial class Customer
{
public int OrderCount { get; set; }
public static Expression<Func<Customer, Customer>> DetailSelector = c => Customer.LoadDetail(c);
public static Customer LoadDetail(Customer customer)
{
customer.OrderCount = customer.Orders.Count;
return customer;
}
}
最简单的方法是什么
更新:只是为了澄清一下,我特别想用表达式来实现这一点。所以我不想从数据库加载订单,我只想填充OrderCount属性。
谢谢,这有点过于简单,但我认为仍然保留实体的基本工作设计。最好的方法是使用.Order.Count。如果你是从那里拉过来的,为什么不把它放在那里呢
如果要编写select查询,请直接包含Customers.Orders的值,并将为您生成适当的SQL。否则,我个人会在加载客户后立即将此值包含在CustomerRepository类中进行设置。然后您总是从一个地方获得您的客户,并且您知道它的集合(当然意味着使用存储库模式)是的,但是我在WCF的分布式场景中使用客户实例,我不想加载订单并将其发送给客户机,只想计算订单的数量(这只是一个简单的例子,在实际的应用程序中,我有许多其他类似的属性)。
public partial class Customer
{
public int OrderCount { get; set; }
public static Expression<Func<Customer, Customer>> DetailSelector = c => Customer.LoadDetail(c);
public static Customer LoadDetail(Customer customer)
{
customer.OrderCount = customer.Orders.Count;
return customer;
}
}
LINQ to Entities does not recognize the method 'Customer LoadDetail(Customer)' method, and this method cannot be translated into a store expression.