Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自定义选择器表达式_C#_.net_Entity Framework - Fatal编程技术网

C# 自定义选择器表达式

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

我有以下简单的场景。我有一个Customer类,它在我的edmx中定义。我还有一个Order类,客户可以通过其Orders属性拥有零个或多个订单

我在Customer类中定义了OrderCount属性,如下所示:

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.