linq2sql оставил соединение с "multiselect" - PullRequest
0 голосов
/ 23 декабря 2010

Я пытаюсь добиться следования по linq2sql, но безуспешно.

У меня есть члены и справочные таблицы. БД спроектирована таким образом, что член может иметь несколько (> = 0) ссылок. В результате запроса я хочу получить список (ряды) членов, где все ссылки на элементы «собраны» в одном столбце.

Я достиг следующего запроса, но для этого существует строка для каждой ссылки.

 var refs = (from m in db.Members
                    join
                        r in db.References on m.PID equals r.PID into g
                    from o in g.DefaultIfEmpty()
                    select new
                    {
                        member = m,
                        name = (o == null ? "" : o.NameSurname)
                    });

Я чувствую, что мне нужно вставить SelectMany:)

Не могли бы вы дать подсказки по достижению цели?

Ответы [ 2 ]

1 голос
/ 23 декабря 2010
var refs = (from m in db.Members
                        select new
                        {
                            member = m,
                            name = String.Join(",",(from  r in db.References on m.PID equals r.PID into g
                        from o in g.DefaultIfEmpty() select o.NameSurname).toArray())
                        }).Distinct();

Это не проверено, но я думаю, это то, что вы ищете. Он должен захватить вашего участника и объединить все ссылки на имя. Если это не сработает, дайте мне знать, и я еще разберусь с этим.

0 голосов
/ 23 декабря 2010

Вы имеете в виду, как это:

var refs = from m in db.Members
           join r in db.References on m.PID equals r.PID into j
           from o in j.DefaultIfEmpty()
           select new { Member = m, Reference = o } into results
           group result by result.Member into g
           select g;

Это сгруппировало бы все ваши результаты по участнику (ключ группы) и всем ссылкам, связанным с ними (результаты, соответствующие этому ключу).

Хотя вам, вероятно, будет лучше просто установить отношения в ORM, тогда вы можете просто ссылаться на свойство (предположительно названное) member.References, например:

foreach( var member in db.Members )
{
    var allReferences = member.References;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...