Bunun eski bir soru olduğunu ve kabul edilen cevabın işe yaradığını biliyorum, ancak bu soru böyle boş bir kümenin bir istisnaya mı yoksa default(int) .
Bununla birlikte, kabul edilen cevap işe yararken, burada verilmeyen ideal çözüm IMHO değildir. Bu yüzden onu arayan herkesin yararına kendi cevabımda veriyorum.
OP'nin orijinal kodu şuydu:
int maxShoeSize = Workers.Where(x => x.CompanyId == 8).Max(x => x.ShoeSize);
İstisnaları önlemek ve varsayılan bir sonuç sağlamak için nasıl yazacağım:
int maxShoeSize = Workers.Where(x => x.CompanyId == 8).Max(x => x.ShoeSize as int?) ?? 0;
Bu, Maxişlevin dönüş türünün olmasına neden olur int?, bu da nullsonuca izin verir ve ardından sonucun ??yerini alır . null0
EDIT
Sadece yorumlardan bir şeyi açıklığa kavuşturmak için Entity Framework şu anda asanahtar kelimeyi desteklemediğinden, EF ile çalışırken yazmanın yolu:
int maxShoeSize = Workers.Where(x => x.CompanyId == 8).Max<[TypeOfWorkers], int?>(x => x.ShoeSize) ?? 0;
Yana [TypeOfWorkers]uzun bir sınıf adı olması ve yazma sıkıcı olabilir, ben yardım etmek bir uzantısı yöntemi ekledik.
public static int MaxOrDefault<T>(this IQueryable<T> source, Expression<Func<T, int?>> selector, int nullValue = 0)
{
return source.Max(selector) ?? nullValue;
}
Bu yalnızca kolları intancak aynı için yapılabilir long, doublesen gerekmez, ya da başka bir değer türü. Bu genişletme yöntemini kullanmak çok basittir, sadece seçici işlevinizi iletirsiniz ve isteğe bağlı olarak null için kullanılacak bir değer eklersiniz, bu değer varsayılan olarak 0 olur. Böylece yukarıdaki gibi yeniden yazılabilir:
int maxShoeSize = Workers.Where(x => x.CompanyId == 8).MaxOrDefault(x => x.ShoeSize);
Umarım bu insanlara daha da fazla yardımcı olur.