IQueryable <T>.GroupBy () для ссылочного типа - PullRequest
0 голосов
/ 24 августа 2011

Используя Linq to SQL, я пишу запросы, в которых используется метод IQueryable.GroupBy.

Несмотря на то, что в моем запросе много таблиц и левых объединений, для иллюстрации скажем, что мы работаем только с двумястолы.TableA имеет отношение один-ко-многим к TableB.

var queryResults = from db.TableA
       .Join(db.TableB, tA => tA.ID, tB => tB.TableA_ID, (ta, tb) => tb)
       .GroupBy(tb => tb.TableA);

Это даст мне

<IQueryable<IGrouping<TableA, TableB>>

На первый взгляд это работает, однако я волнуюсь, потому что звонюметод GroupBy и передача ссылочного типа для аргумента keySelector.

Пожалуйста, помогите мне понять, почему это безопасно или не безопасно.

Ответы [ 2 ]

0 голосов
/ 25 августа 2011

Попробуйте это:

var queryResults =
    from ta in db.TableA
    join tb in db.TableB on ta.ID equals tb.TableA_ID
    group tb by ta;

И да, это безопасно для ссылочных типов. Запрос, сгенерированный linq-to-sql, не имеет ничего общего со ссылочными типами - это просто SQL.

0 голосов
/ 25 августа 2011

Трудно сказать, что вы пытаетесь сделать, но я думаю, что вы, возможно, захотите использовать синтаксис понимания здесь, чтобы было легче писать / понимать. В частности, делайте свою группировку после , когда вы выполняли любые объединения или другие операции, которые вы хотите сделать, вместо того, чтобы смешивать их вместе.

var query = ... (can be chained methods, whatever)

var grouped = from row in query
              group row by row.SomeProperty;

Тогда вам, вероятно, будет легче (я бы подумал) написать и аргументировать запрос.

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