Помогите построить запрос LINQ2SQL, который имеет соединения - PullRequest
1 голос
/ 26 июня 2011

У меня есть это:

var q = (from order in db.Orders
                        from payment in db.Payments
                        .Where(x => x.ID == order.paymentID)
                        .DefaultIfEmpty()
                        from siteUser in db.SiteUsers
                        .Where(x => x.siteUserID == order.siteUserID)
                        .DefaultIfEmpty()
                        where siteUser.siteUserID != null
                                                select new
                        {
                            order.orderID,
                            order.dateCreated,
                            payment.totalAmount,
                            siteUser.firstName,
                            siteUser.lastName
                        });

Я хочу добавить к этому вот так:

switch (_qs["sort"])
            {
                case "0":
                    q = q.OrderByDescending(x => x.dateCreated);
                    break;
                case "1":
                    q = q.OrderBy(x => x.dateCreated);
                    break; ...

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

Примечание: я даже пытался создать класс со свойствами, которые я выбираю и приводил запрос к этому типу, но все еще не ходил.

1 Ответ

1 голос
/ 26 июня 2011

Не уверен, что я понимаю вопрос, но код, который вы вставили, мне подходит.

Я проверил:

var q = (
    from order in db.Orders
    join payment in db.Payments on
        order.paymentID equals payment.ID into payments
    from payment in payments.DefaultIfEmpty()
    join siteUser in db.SiteUsers on
        order.siteUserID equals siteUser.siteUserID into siteUsers
    from siteUser in siteUsers.DefaultIfEmpty()
    where siteUser.siteUserID != null
    select
        new
        {
            order.orderID,
            order.dateCreated,
            payment.totalAmount,
            siteUser.firstName,
            siteUser.lastName
        });
switch (sort)
{
    case "0":
        q = q.OrderByDescending(x => x.dateCreated);
        break;
    case "1":
        q = q.OrderBy(x => x.dateCreated);
        break;
}
var restult = q.ToList();

Это работает.

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