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, Max
işlevin dönüş türünün olmasına neden olur int?
, bu da null
sonuca izin verir ve ardından sonucun ??
yerini alır . null
0
EDIT
Sadece yorumlardan bir şeyi açıklığa kavuşturmak için Entity Framework şu anda as
anahtar 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ı int
ancak aynı için yapılabilir long
, double
sen 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.