Как я могу создать динамический запрос LINQ в C # с несколькими предложениями group by? - PullRequest
6 голосов
/ 24 мая 2010

Я работаю программистом уже несколько лет, но я
новичок в LINQ и C #, так что простите, если мой вопрос звучит
особенно глупо.

Я надеюсь, что кто-то сможетНаправь меня в правильном
направлении.Моя задача состоит в том, чтобы придумать возможность формировать динамическую множественную группу
по запросу linq в сценарии ac #, используя
общий список в качестве источника.

Например, скажем, у меня есть списоксодержащий несколько элементов со следующей структурой
:

FieldChar1 - character
FieldChar2 - character
FieldChar3 - character
FieldNum1 - numeric
FieldNum2 - numeric

В двух словах, я хочу иметь возможность создать запрос LINQ, который
будет суммировать FieldNum1 и FieldNum2, сгруппированные по любому, двум или
все три поля FieldChar, которые будут определены во время выполнения
в зависимости от требований пользователей, а также выбора полей FieldChar в одном запросе.

У меня есть файл dynamic.cs, которыйВ него включен метод расширения GroupByMany, но я должен признать, что я действительно не уверен, как их использовать.Я могу получить желаемые результаты, если использую запрос с жестко запрограммированной группой по запросам, но не динамически.

Извиняюсь за любую ошибочную номенклатуру, я новичок в этом языке, но любые советы будут приветствоваться.

Большое спасибо

Алекс

Ответы [ 2 ]

1 голос
/ 24 мая 2010

Вот основной GroupBy пример. Допустим, у нас есть простой класс, подобный этому:

public class Person
{
    public string Name { get; set; }

    public int Age { get; set; }

    public char Sex { get; set; }
}

Затем вы можете использовать GroupBy так:

var people = new List<Person> {
    new Person { Name = "Joe", Age = 30, Sex = 'M' },
    new Person { Name = "Liz", Age = 22, Sex = 'F' },
    new Person { Name = "Jim", Age = 22, Sex = 'M' },
    new Person { Name = "Alice", Age = 30, Sex = 'F' },
    new Person { Name = "Jenny", Age = 22, Sex = 'F' }
};
var groups = people.GroupBy(p => p.Age);

foreach (var group in groups)
{
    foreach (var person in group)
        Console.WriteLine(person.Name + " - " + person.Age);
}

Что касается группировки по нескольким свойствам, см. Эти:
http://weblogs.asp.net/zeeshanhirani/archive/2008/05/07/group-by-multiple-columns-in-linq-to-sql.aspx
LINQ TO DataSet: несколько групп по таблице данных

По сути, это тот же синтаксис с анонимным типом, например:

var groups = people.GroupBy(p => new { p.Age, p.Sex });

Обратите внимание, что вы можете использовать несколько OrderBy s:

var query = people.OrderBy(p => p.Age).ThenBy(p => p.Sex);
//You can have unlimited ThenBy's

Также обратите внимание, что результат последнего оператора GroupBy и результат этого оператора OrderBy НЕ совпадают.

0 голосов
/ 25 мая 2010

GroupBy (groupByName + "" + groupByDirection, new {})

Таким образом, вы можете передать в groupByName и groupByDirection, когда вы проходите, вы можете увидеть что-то вроде

GroupBy("lastName desc", new {})

или

GroupBy ("firstName asc", new {})

...