Linq Query: сумма столбцов для данной строки - PullRequest
3 голосов
/ 23 февраля 2012

Я искал много вопросов, опубликованных здесь, но я не могу найти лучшее решение для моей проблемы.

У меня есть таблица с 6 столбцами, в которой хранятся десятичные значения, и я хочу сделать сумму всех столбцов в запросе. В настоящее время это то, что я делаю.

(from i in db.OperationalValues
 where i.Timestamp == date
 select new
 {
   CumulativeValues = i.Value1.GetValueOrDefault(0)
                           + i.Value2.GetValueOrDefault(0)
                           + i.Value3.GetValueOrDefault(0)
                           + i.Value4.GetValueOrDefault(0)
                           + i.Value5.GetValueOrDefault(0)
                           + i.Value6.GetValueOrDefault(0),
 }).FirstOrDefault();

Я просмотрел много вопросов и ответов, но надеялся найти лучший способ написать этот запрос LINQ. Поскольку таблица может иметь больше столбцов, и если количество столбцов увеличится, запрос станет огромным.

Если у кого-то есть лучший способ написать этот запрос LINQ, он будет очень признателен.

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 23 февраля 2012
var result = new { CumulativeValues = 0 };
var item = db.OperationalValues.FirstOrDefault(i => i.Timestamp == date);
if (item != null)
    result = new { CumulativeValues = item.Value1 ?? 0 + item.Value2 ?? 0 + item.Value3 ?? 0 + item.Value4 ?? 0 + item.Value5 ?? 0 + item.Value6 ?? 0 };
0 голосов
/ 23 февраля 2012

Думаю, что это вариант, который вы имеете из-за упомянутой вами динамической природы:

Динамический LINQ (Часть 1. Использование библиотеки динамических запросов LINQ)

0 голосов
/ 23 февраля 2012

Это лучший / единственный способ пойти без углубления в размышления при поиске десятичных типов свойств.

Однако, если у вас есть множество этих столбцов «значения», вы можете захотеть изменить структуру своей базы данных напереместите их в строки в связанной таблице.Если бы вы сделали это, вы могли бы использовать Sum функциональность Linq-to-sql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...