Бэкенд файловой системы только стоит посмотреть на то, если Вы не собираетесь использовать базу данных для какой-либо другой части Вашей системы. При использовании базы данных затем, бэкенд файловой системы не имеет ничего для рекомендации этого.
бэкенд кэш-памяти намного более быстр, чем бэкенд базы данных, но Вы рискуете очищаемой сессией и некоторые Ваши потерянные данные сессии.
, Если Вы действительно, веб-сайт действительно интенсивного трафика и кодируете тщательно, таким образом, можно справиться с потерей сессии затем, используют кэш-память. Если Вы не используете использование базы данных, кэш файловой системы, но бэкенд базы данных по умолчанию является лучшей, самой безопасной и самой простой опцией почти во всех случаях.
Наряду с предыдущим предложением для метода расширения - вы можете использовать тернарный оператор ...
var duration = Level3Data.AsQueryable().Any(d => d.DurationMonths.HasValue)
? Level3Data.AsQueryable().Sum(d => d.DurationMonths)
: null;
Вы можете использовать Aggregate
для предоставления настраиваемого кода агрегирования:
var items = Level3Data.AsQueryable();
var duration = items.Aggregate<D,int?>(null, (s, d) => (s == null) ? d.DurationMonths : s + (d.DurationMonths ?? 0));
(при условии, что элементы в Level3Data
имеют тип D
])
Используя только Sum, это невозможно. Как вы указали в своем вопросе, вам нужно будет проверить эту ситуацию перед тем, как позвонить Sum:
var q = Level3Data.AsQueryable();
var duration = q.All(d => d.DurationMonths == null)
? null
: q.Sum(d => d.DurationMonths);