Как я могу использовать условие, основанное на запрашиваемых данных в анонимном классе в LINQ to DataSet? - PullRequest
0 голосов
/ 02 марта 2010

Я могу сделать это путем зацикливания результата упрощенного запроса:

var query = from myrecord in dt.AsEnumerable()
    where myrecord.Field<string>("field1") == "value1" || myrecord.Field<string>("field1") == "value2"
    select myrecord;

foreach(var myrecord in query)
{
    //if value1, then "X"
    //sum += field2
}

Но я хочу знать, возможно ли это в операторе LINQ.

Анонимный класс с двумя членами: Имя и Значение. Имя - «X» или «Y» в зависимости от field1, а Value - сумма всех значений field2 для записей, в которых выполняются условия. Я думаю, что мне нужно использовать метод Count (), но я не уверен, как и где. Может быть, мне нужно использовать «group» и «into», чтобы получить счет из временной таблицы?

Если есть записи с (field1 == "value1"), строка будет "X", иначе строка будет "Y".

var query = from table in dt.AsEnumerable()
    where table.Field<string>("field1") == "value1" || 
        table.Field<string>("field1") == "value2"
    select new
    {
        Name = (condition ? "X" : "Y"),
        Value = //sum all field2 values
    };

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

Ответы [ 3 ]

0 голосов
/ 02 марта 2010

Вы просто используете переменную "table", которая у вас уже есть.

var query = from table in dt.AsEnumerable() 
where table.Field<string>("field1") == "value1" ||  
    table.Field<string>("field1") == "value2" 
select new 
{ 
    Name = (table.whatever ? "X" : "Y"), 
    Value = table.something.Sum()
}; 
0 голосов
/ 02 марта 2010

Вы можете просто получить сумму таблицы, выполнив

table.Sum(t => t.ValueToSum) //Or whatever sub-table you need to sum
0 голосов
/ 02 марта 2010

уверен, что можете, следующий пример работает аналогично

class Program
    {
        static void Main(string[] args)
        {
            List<Person> persons= new List<Person>();
            var result = from p in persons
            select new
             {
              Name = (s.IsMarried ? s.X : s.Y)
             };
        }
    }
    class Person
    {
        public bool IsMarried { get; set; }
        public string X { get; set; }
        public string Y { get; set; }
    }
...