Linq to sql 帮助构建具有连接的LINQ2SQL查询

Linq to sql 帮助构建具有连接的LINQ2SQL查询,linq-to-sql,Linq To Sql,我有这个: var q = (from order in db.Orders from payment in db.Payments .Where(x => x.ID == order.paymentID) .DefaultIfEmpty() from siteUser in db.SiteUsers

我有这个:

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; ...
我以前用一个表做过这项工作,但是第一个代码块中的多个表迫使我指定一个select语句,这使它成为匿名类型。如何做到这一点


注意:我甚至尝试使用我正在选择的属性创建一个类,并将查询强制转换为这种类型,但仍然是不可行的。

我不确定我是否理解这个问题,但您粘贴的代码对我来说是有效的

我检查:

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();

这是可行的。

我不确定我是否理解这个问题,但您粘贴的代码对我来说是有效的

我检查:

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();

这是有效的。

@Nick-如果这不能回答问题,请解释一下问题所在。你的权利确实有效。。。我不确定我以前吃的东西会不会起作用。谢谢@尼克-如果这还不能回答问题,请解释什么是错的。你的权利确实有效。。。我不确定我以前吃的东西会不会起作用。谢谢