Запрос Linq и получить агрегированный результат + дополнительная информация - PullRequest
0 голосов
/ 15 февраля 2011

Я создаю запрос linq, чтобы получить некоторые данные, которые будут возвращать список электронных писем и некоторую другую информацию.

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

Я хочу знать, каков linq способ получить набор результатов, который возвращает мне что-то вроде

email1@domain.com,email2@domain.com  |   INFO
email3@domain.com  |   INFO2
email4@domain.com,email5@domain.com,email6@domain.com,email3@domain.com  |   INFO3

Первым свойством является список писем в формате csv.

Запрос, который у меня сейчас есть, выглядит примерно так:

from user in context.Users
join ufa in context.UFAccesses on user equals ufa.User
join f in context.F on ufa.Feed equals f
join fp in context.FP on f equals fp.F
select new { thisUfa = fp.F.UFAccess.Where(ufaSearch => ufaSearch.User == user && ufaSearch.F == f).FirstOrDefault(), user.Email, fp.Title, fp.Content };

РЕДАКТИРОВАТЬ: некоторая дополнительная информация, чтобы помочь ответчику. может быть, есть лучший способ сделать это. Основная причина этого вопроса заключается в том, что, поскольку я получаю эту ИНФОРМАЦИЮ несколько раз (поскольку она может соответствовать более чем одному письму), я получаю ненужные данные. позже я могу сделать цикл в этом наборе результатов и для каждой информации получить список электронных писем, которые ему соответствуют, но, конечно, я хотел бы получить что-то более эффективное и, если возможно, в linq.

1 Ответ

2 голосов
/ 16 февраля 2011

Это должно решить вашу проблему:

public class Something
{
    public string Email { get; set; }
    public string Info { get; set; }
}

var list = new List<Something>();
list.Add(new Something { Email = "email1", Info = "info1" });
list.Add(new Something { Email = "email2", Info = "info2" });
list.Add(new Something { Email = "email3", Info = "info3" });
list.Add(new Something { Email = "email4", Info = "info3" });
list.Add(new Something { Email = "email5", Info = "info3" });
list.Add(new Something { Email = "email6", Info = "info1" });

var groupedList = list.GroupBy(e => e.Info).Select(g => new { Info = g.Key, Emails = String.Join(",",g.Select(e => e.Email)) });

Сначала мы группируемся с GroupBy(e => e.Info), а затем выбираем ключ группы (Info) и присоединяемые электронные письма:

new { Info = g.Key, Emails = String.Join(",",g.Select(e => e.Email)) });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...