linq-to-sql-帮助构建具有联接的LINQ2SQL查询



我有这个:

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

这是有效的。

最新更新