linq排序很多2个问题

时间:2010-03-30 13:21:58

标签: linq linq-to-entities

我的主要实体叫做[合同]。合同与[服务]有很多关系。

当我查询合同列表时,我会抓住第一个服务,如下所示:

IQueryable<Contract> q = ctx.Contracts.Skip(startRow - 1).Take(pgSize);
q.Select(c =>
         new ContractSearchResult()
         {
           ContractID = c.ContractID,
           FirstService = c.Contract2Service.FirstOrDefault().Service.Name,
           ServiceCount = c.Contract2Service.Count,
         }
        ).ToList();

(当我显示此列表时,如果只有1,则显示FirstService。如果&gt; 1我显示“My1stService(3)”以显示我看到3个服务中的第1个)这样可以正常工作。

我的问题是:

有没有办法按FirstService排序?或者这不可能吗?我还没有找到一种在linq中表达这种情况并允许分页的方法。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

您需要在分页前订购。

var result = ctx.Contracts
    .Select(c =>
        new ContractSearchResult()
        {
            ContractID = c.ContractID,
            FirstService = c.Contract2Service.FirstOrDefault().Service.Name,
            ServiceCount = c.Contract2Service.Count,
        })
 .OrderBy(x => x.FirstService)
 .Skip(startRow - 1)
 .Take(pgSize)
 .ToList();

另请注意,FirstOrDefault可以返回null,您应该检查一下。如果您知道它将(或应该)永远不会null,那么请改用First

答案 1 :(得分:1)

q.OrderBy(c => c.Contract2Service.FirstOrDefault().Service.Name)
 .Select(c =>
        new ContractSearchResult()
        {
            ContractID = c.ContractID,
            FirstService = c.Contract2Service.FirstOrDefault().Service.Name,
            ServiceCount = c.Contract2Service.Count,
        }
    )
 .ToList();

除非我在您的问题中遗漏了某些内容(可能),否则应该在致电OrderBy()

之后致电Select()一样简单