LINQ / Проекция - Как отсортировать TableA по полю / имени столбца не FK на TableB? - PullRequest
0 голосов
/ 08 ноября 2011

Как я могу использовать LINQ / Projection для сортировки списка объектов A, которые содержат поле id, которое ссылается на таблицу / объект B (B содержит идентификатор и имя).

Я хочу отсортировать список объектов A, содержащих B, по B.name?

Модель (псевдо)

public class A
{
   public int AId {get; set;}
   public Nullable<int> BId {get; set;}
}
public class B
{
   public int BId {get;set;}
   public string Name {get;set;}
}

Код в некотором контроллере, передающий список A, которые содержат B, но сортируют их по B.Name?

var list = db.As.OrderBy(x => x.BId->References.Name);  // Way wrong but using something similar
return(list.ToList()

По сути, ищем эквивалент этого (используя проекционное соединение или OrderBy сверху):

        var q1 =
             from a in db.As
             join b in db.Bs on a.BId equals b.BId
             orderby b.Name   // <- Need this to sort by B's name
             select c;

1 Ответ

1 голос
/ 08 ноября 2011

Прав ли я, что вы ищете эквивалент запроса LINQ, который вы уже написали выше, только что он основан на методах расширения?

В этом случае должно работать:

var list = db.As.Where(a => a.BId.HasValue)
                .Join(db.Bs, a => a.BId.Value, b => b.BId, (a, b) => new { a, b.Name })
                .OrderBy(r => r.Name)
                .Select(r => r.a);

Я также добавил проверку, чтобы убедиться, что A.BId не является нулевым, прежде чем получить его значение.

Просто любопытно: почему вы не можете использовать свой запрос LINQ (с той лишь разницей, что выбираете вместо c)?

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