.Single或Default with condition或Where子句

Mic*_*Man 5 .net c# entity-framework

我有以下代码

    return
    this.Storage.Customer.OfType<Preferred>()
    .Include(b  => b.Order)
    .Where(cust => cust.Id == customerId && cust.CustomerType== (int)cusType)
    .SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)

它可以改写如下消除where.

    return
    this.Storage.Customer.OfType<Preferred>()
    .Include(b  => b.Order)
    .SingleOrDefault(cust => cust.Id == customerId && cust.CustomerType == (int)cusType);
Run Code Online (Sandbox Code Playgroud)

哪一个更好实践,为什么?

Ron*_*tel 1

首先你需要明白其中的区别

this.Storage.Customer.OfType<Preferred>()
.Include(b  => b.Order)
.Where(cust => cust.Id == customerId && cust.CustomerType== (int)cusType)
Run Code Online (Sandbox Code Playgroud)

这只会创建一个查询,但在调用 ToList 方法之前不会执行。

SingleOrDefault 方法将实际执行查询。因此,如果您想在执行查询之前对其进行检查或执行某些操作,则应使用 where ,然后调用 SingleOrDefault。

总的来说,根据我个人的意见,使用 where 是很好的做法