.SingleorDefaultwithconditionorWhereclause我有下面的代码returnthis.Storage.Customer.OfType().Include(b=>b.Order).Where(cust=>cust.Id==customerId&&cust.CustomerType==(int)cusType).SingleOrDefault();可以改写如下,去掉where。返回this.Storage.Customer.OfType().Include(b=>b.Order).SingleOrDefault(cust=>cust.Id==customerId&&cust.CustomerType==(int)cusType);哪个更好练习,为什么?首先,您需要了解this.Storage.Customer.OfType().Include(b=>b.Order).Where(cust=>cust.Id==customerId&&cust.CustomerType==(int)cusType)的区别只是创建一个查询,但在您调用ToList方法之前不会执行它。SingleOrDefault方法将实际执行查询。所以如果你想在执行查询之前检查或做一些事情,你应该使用where然后调用SingleOrDefault。总的来说,在我个人看来,使用where是一个很好的做法。由于调试函数返回值的复杂性和不可能在调试器中使用lambda表达式,这是最好的方法:vartemp=this.Storage.Customer.OfType().Include(b=>b.Order).Where(cust=>cust.Id==customerId&&cust.CustomerType==(int)cusType);返回temp.SingleOrDefault();,如果SingleOrDefault()出现异常(如果您正在执行复杂的表达式,这很常见),您可以在返回时放置一个断点并在监视面板中执行:temp.ToList();oldpost,主要是基于意见,但这里有另一个上面没有提到的考虑因素:SingleOrDefault子句不能与Select等其他术语一起使用,因为正如Patel在上面指出的那样,它实际上执行了查询。例如,假设您想修改查询以仅返回客户的姓名:this.Storage.Customer.OfType().Include(b=>b.Order).SingleOrDefault(cust=>cust.Id==customerId&&cust.CustomerType==(int)cusType).Select(cust=>cust.Name);//编译错误将不起作用,您不能将Select子句移到SingleOrDefault之前,因为在SingleOrDefault中,对于lambda表达式,Id和CustomerType字段将不可见。相反,您需要先添加Where子句:this.Storage.Customer.OfType().Include(b=>b.Order).Where(cust=>cust.Id==customerId&&cust.CustomerType==(int)cusType).Select(cust=>cust.Name).SingleOrDefault();因此,始终使用它来确保一致性、可读性和可读性,因为Where子句通常是必需的,并且至少始终具有良好的性能可维护性可能是一个很好的做法。以上就是C#学习教程分享的全部内容:.SingleorDefaultwithconditionorWhereclause。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
