powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Linq2Sql как правильно писать sum?
22 сообщений из 22, страница 1 из 1
Linq2Sql как правильно писать sum?
    #36232104
OldWoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет! задача - нужно просумировать значение Amount ( not null!!!) по группам

Код: plaintext
1.
2.
3.
4.
var query = query.Where(p => p тут отбор)
.GroupBy(p => p.keyId).Select(p => p);

decimal?  d =  query.Sum(p => p == null ? 0 : p.Sum(p1 => p1 == null ? 0 : p1.Amount));
Если отбор ( условие в Where ) такое что реально нет ни одной записи выражение для сумирования даёт ошибку
The null value cannot be assigned to a member with type System.Decimal which is a non-nullable value type.
Как правильно писать без обхода групп?
...
Рейтинг: 0 / 0
Linq2Sql как правильно писать sum?
    #36232201
OldWoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ошибку можно и проще получить

Код: plaintext
decimal d - query.where(....).Sum(p=>p.Amount);
Если условие where ничего не отбирает то sum ломается. Конечно выход писать так

Код: plaintext
decimal d - query.Where(....).ToList().Sum(p=>p.Amount);
но м.б. можно и нормально суммировать?
...
Рейтинг: 0 / 0
Linq2Sql как правильно писать sum?
    #36232323
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
честно говоря не словил
Код: plaintext
1.
2.
3.
4.
List<int?> list = new List<int?>();
            list.Add(1);
            list.Add(null);
            int? sum = list.Where(a=>a>0).Sum();
            this.Text = sum.ToString();
Ну попробуй GetValueOrDefault.
...
Рейтинг: 0 / 0
Linq2Sql как правильно писать sum?
    #36232340
OldWoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buredчестно говоря не словил
Код: plaintext
1.
2.
3.
4.
List<int?> list = new List<int?>();
            list.Add(1);
            list.Add(null);
            int? sum = list.Where(a=>a>0).Sum();
            this.Text = sum.ToString();
Ну попробуй GetValueOrDefault.

У меня IQueryble и это существенно для данного случая. Если превращаем в IEnumerable то проблемы нет, но хотелось бы что суммирование было на сервере а не на клиенте
...
Рейтинг: 0 / 0
Linq2Sql как правильно писать sum?
    #36232502
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нихрена не ясно: группу-то зачем на null проверять?
...
Рейтинг: 0 / 0
Linq2Sql как правильно писать sum?
    #36232646
OldWoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buredнихрена не ясно: группу-то зачем на null проверять?
Это типа, что бы было понятно что это ни к чему не приводит :-( Вроде как ни пиши IQueryable sum работает с ошибкой. Если всзять

Код: plaintext
decimal sum = DataContext.MyTable.Wherer(....).Sum(p=>p.Amount)

если Where так что ничего нет то получаем ошибку. Если перед суммированием приведём к IEnumerable

Код: plaintext
1.
2.
decimal sum = DataContext.MyTable.Wherer(....)
.ToList()
.Sum(p=>p.Amount)

то вроде считает!
...
Рейтинг: 0 / 0
Linq2Sql как правильно писать sum?
    #36232704
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OldWoker,

p.Amount decimal?

?
...
Рейтинг: 0 / 0
Linq2Sql как правильно писать sum?
    #36232879
OldWoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buredOldWoker,

p.Amount decimal?

?
yes of corse!!!
...
Рейтинг: 0 / 0
Linq2Sql как правильно писать sum?
    #36232933
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OldWoker
У меня IQueryble и это существенно для данного случая. Если превращаем в IEnumerable то проблемы нет, но хотелось бы что суммирование было на сервере а не на клиенте
так и Sum тоже неотложенная операция, преобразующая в IEnumerable.
...
Рейтинг: 0 / 0
Linq2Sql как правильно писать sum?
    #36232938
OldWoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bured,
Но почему то

Код: plaintext
1.
2.
3.
decimal sum = DataContext.MyTable.Wherer(....)
// .ToList() так будет ошибка!
.Sum(p=>p.Amount)
...
Рейтинг: 0 / 0
Linq2Sql как правильно писать sum?
    #36232958
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
public static Nullable<long> Sum<TSource>(
    this IEnumerable<TSource> source,
    Func<TSource, Nullable<long>> selector
)
Очевидно, что Null не преобразовать неявно в IEnumerable<TSource>
...
Рейтинг: 0 / 0
Linq2Sql как правильно писать sum?
    #36232965
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. Null то и явно не преобразовать ;), но если селект не путой, то IQueryable неявно преобразовывается в IEnumerable Sum-ом
...
Рейтинг: 0 / 0
Linq2Sql как правильно писать sum?
    #36232997
OldWoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buredOldWoker
У меня IQueryble и это существенно для данного случая. Если превращаем в IEnumerable то проблемы нет, но хотелось бы что суммирование было на сервере а не на клиенте
так и Sum тоже неотложенная операция, преобразующая в IEnumerable.

IQueryable<T>.Sum - метод
http://msdn.microsoft.com/ru-ru/library/bb919078.aspx
...
Рейтинг: 0 / 0
Linq2Sql как правильно писать sum?
    #36233001
OldWoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подождём Господина Зы - он то знает что к чему!
...
Рейтинг: 0 / 0
Linq2Sql как правильно писать sum?
    #36233163
Pasionario
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделайте явное преобразование
Код: plaintext
.Sum(p=>(decimal?)p.Amount);
...
Рейтинг: 0 / 0
Linq2Sql как правильно писать sum?
    #36233191
OldWoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pasionarioсделайте явное преобразование
Код: plaintext
.Sum(p=>(decimal?)p.Amount);

Не помогает! причина в том что sum должен вернуть ( по сигнатуре) decimal, нет сигнатуры sum возвращающего Nullable<decimal> !!!
...
Рейтинг: 0 / 0
Linq2Sql как правильно писать sum?
    #36233215
Pasionario
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OldWokerPasionarioсделайте явное преобразование
Код: plaintext
.Sum(p=>(decimal?)p.Amount);

Не помогает! причина в том что sum должен вернуть ( по сигнатуре) decimal, нет сигнатуры sum возвращающего Nullable<decimal> !!!
Правда?
http://msdn.microsoft.com/en-us/library/bb549409.aspx
...
Рейтинг: 0 / 0
Linq2Sql как правильно писать sum?
    #36233239
OldWoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PasionarioOldWokerPasionarioсделайте явное преобразование
Код: plaintext
.Sum(p=>(decimal?)p.Amount);

Не помогает! причина в том что sum должен вернуть ( по сигнатуре) decimal, нет сигнатуры sum возвращающего Nullable<decimal> !!!
Правда?
http://msdn.microsoft.com/en-us/library/bb549409.aspx
Спасибо! Там же написано
Exception Condition - ArgumentNullException - source or selector is null.

Так как написать lambda выражение что бы объехать случай "source or selector is null" ?
...
Рейтинг: 0 / 0
Linq2Sql как правильно писать sum?
    #36233773
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наврал я. Ни при чём тут IEnumerable с IQueryable.
MyTable какого типа? Честно говоря забыл уже Linq2Sql.
...
Рейтинг: 0 / 0
Linq2Sql как правильно писать sum?
    #36235627
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а гуглить кто будет? ответы на первых же ссылках
Код: plaintext
1.
2.
decimal sum = DataContext.MyTable.Where(....)
.Sum(p=>(decimal?)p.Amount) ?? 0;
[/quot]
...
Рейтинг: 0 / 0
Linq2Sql как правильно писать sum?
    #36235878
OldWoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зыа гуглить кто будет? ответы на первых же ссылках
Код: plaintext
1.
2.
decimal sum = DataContext.MyTable.Where(....)
.Sum(p=>(decimal?)p.Amount) ?? 0;
[/quot]
Млин! Работает! Но вроде первое что так именно и пытались написать!
Но ломалось так случай более сложный

Код: plaintext
1.
2.
3.
4.
5.
// так ломается
decimal d1 = debquery.Sum(p => p.Sum(t => (decimal?)t.AmountSale).GetValueOrDefault() ); 

// так работает!
decimal d1 = debquery.Sum(p => p.Sum(t => (decimal?)t.AmountSale) ).GetValueOrDefault(); 

Зы ЭТО Зы !!!
...
Рейтинг: 0 / 0
Linq2Sql как правильно писать sum?
    #36236017
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OldWoker
Код: plaintext
1.
2.
3.
4.
5.
// так ломается
decimal d1 = debquery.Sum(p => p.Sum(t => (decimal?)t.AmountSale).GetValueOrDefault() ); 

// так работает!
decimal d1 = debquery.Sum(p => p.Sum(t => (decimal?)t.AmountSale) ).GetValueOrDefault(); 

Конечно ломается если в селекте 0 членов, то до делегата и дело не дойдёт.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Linq2Sql как правильно писать sum?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]