闽公网安备 35020302035485号
int maxShoeSize = Workers.Where(x => x.CompanyId == 8)
.Max(x => x.ShoeSize);
如果 Workers.Where(x => x.CompanyId == 8) 没有查到任何 Workers 的话,上面的代码将会抛出异常。 class Program
{
static void Main(string[] args)
{
List<Worker> Workers = new List<Worker>()
{
new Worker(){ CompanyId=1, CompanyName="tweet", ShoeSize=10 },
new Worker(){ CompanyId=2, CompanyName="google", ShoeSize=20 },
};
int maxShoeSize = Workers.Where(x => x.CompanyId == 8)
.Select(x => x.ShoeSize)
.DefaultIfEmpty(0)
.Max();
Debug.WriteLine($"maxShoeSize={maxShoeSize}");
}
}
class Worker
{
public int CompanyId { get; set; }
public string CompanyName { get; set; }
public int ShoeSize { get; set; }
}
输出结果: int maxShoeSize = Workers.Where(x => x.CompanyId == 8)
.Select(x => (int?)x.ShoeSize)
.Max() ?? 0;
代码看起来是不是有点冗长,最好的方式还是自定义一个 扩展方法,如下代码所示:public static int MaxOrDefault<T>(this IQueryable<T> source, Expression<Func<T, int?>> selector, int nullValue = 0)
{
return source.Max(selector) ?? nullValue;
}
为了简单,这个扩展方法仅处理了 int 类型,你可以改成任意类型如:(long,double,...),接下来可以继续改造一下调用方。
int maxShoeSize = Workers.Where(x => x.CompanyId == 8).MaxOrDefault(x => x.ShoeSize);希望我的答案可以帮助到更多人。