我有一个疑问:
int maxShoeSize = Workers
.Where(x => x.CompanyId == 8)
.Max(x => x.ShoeSize);
如果公司8根本没有工人,maxShoeSize中会有什么?
更新: 我如何改变查询,以获得0,而不是一个异常?
我有一个疑问:
int maxShoeSize = Workers
.Where(x => x.CompanyId == 8)
.Max(x => x.ShoeSize);
如果公司8根本没有工人,maxShoeSize中会有什么?
更新: 我如何改变查询,以获得0,而不是一个异常?
当前回答
int maxShoeSize = Workers.Where(x => x.CompanyId == 8)
.Select(x => x.ShoeSize)
.DefaultIfEmpty(0)
.Max();
DefaultIfEmpty中的0是不必要的。
其他回答
你可以试试这个:
int maxShoeSize = Workers.Where(x=>x.CompanyId == 8).Max(x => x.ShoeSize) ?? 0;
你可以在.Max()中使用三元来处理谓词并设置它的值;
// assumes Workers != null && Workers.Count() > 0
int maxShoeSize = Workers.Max(x => (x.CompanyId == 8) ? x.ShoeSize : 0);
如果可能的话,您需要处理Workers集合为null/空,但这取决于您的实现。
int maxShoeSize = Workers.Where(x => x.CompanyId == 8)
.Select(x => x.ShoeSize)
.DefaultIfEmpty(0)
.Max();
DefaultIfEmpty中的0是不必要的。
int maxShoeSize=Workers.Where(x=>x.CompanyId==8)
.Max(x=>(int?)x.ShoeSize).GetValueOrDefault();
(假设ShoeSize是int类型)
如果Workers是来自实体框架的DbSet或ObjectSet,您的初始查询将抛出InvalidOperationException,但不是抱怨一个空序列,而是抱怨物化值NULL不能转换为int。
Max会抛出System。序列不包含元素
class Program
{
static void Main(string[] args)
{
List<MyClass> list = new List<MyClass>();
list.Add(new MyClass() { Value = 2 });
IEnumerable<MyClass> iterator = list.Where(x => x.Value == 3); // empty iterator.
int max = iterator.Max(x => x.Value); // throws System.InvalidOperationException
}
}
class MyClass
{
public int Value;
}