C# 如何使用GroupBy和OrderBy将LINQ-to-SQL查询投影到自定义对象中

C# 如何使用GroupBy和OrderBy将LINQ-to-SQL查询投影到自定义对象中,c#,sql,linq,linq-to-sql,C#,Sql,Linq,Linq To Sql,我正在尝试转换此查询,以便将其输出到自定义DTO类型对象。我只想获得我传入的int[]版本号最高的页面 return from page in db.Pages where intItemIdArray.Contains(page.pageId) group page by page.pageId into g orderby g.Max(x => x.pageId) s

我正在尝试转换此查询,以便将其输出到自定义DTO类型对象。我只想获得我传入的
int[]
版本号最高的页面

return from page in db.Pages
               where intItemIdArray.Contains(page.pageId)
               group page by page.pageId into g
               orderby g.Max(x => x.pageId)
               select g.OrderByDescending(t => t.revision).First();
但当我试图替换

select g.OrderByDescending(t => t.revision).First();
有点像

select (new JPage {pageid = g.pageId, title = g.title, etc})
    .OrderByDescending(t => t.revision)
    .First();
不行,有人能帮我吗


这是我目前所做的,我不喜欢,但它工作得很好,我不需要优化超过这个目前

如果有人能改进这一点,那就太好了

var pages = from page in db.Pages
               where intItemIdArray.Contains(page.pageId)
               group page by page.pageId into g
               orderby g.Max(x => x.pageId)
               select g.OrderByDescending(t => t.revision).First();

        return pages.Select(x => new JPage() { 
            pageId = x.pageId,
            pageKey = x.pageKey,
            title = x.title,
            body = x.body,
            isFolder = x.isFolder.ToString(),
            leftNode = x.leftNode,
            rightNode = x.rightNode,
            revision = x.revision,
            sort = x.sort,
            createdBy = x.createdBy.ToString(),
            createdDate = Utility.DateTimeToUnixTimeStamp(x.createdDate).ToString(),
            modifiedDate = Utility.DateTimeToUnixTimeStamp(x.modifiedDate).ToString(),
            pageVariationId = x.pagesVariationId,
            parentId = x.parentId
        })
        .AsQueryable(); 

我建议您在选择之前先下单;i、 e.代替

select (new JPage {pageid = g.pageId, title = g.title, etc}
    .OrderByDescending(t => t.revision).First();
你应该试试

.OrderByDescending(t => t.revision)
    .Select(new JPage {pageid = g.pageId, title = g.title, etc})
    .First();

如果在上一次“选择”的结果中不存在“修订版”,则不能按“修订版”订购。

这应该是一个轻微的改进

var pages = from page in db.Pages
               where intItemIdArray.Contains(page.pageId)
               group page by page.pageId into g
               select g.First(a => a.revision == g.Max(b => b.revision));

你知道你少了一个括号,对吗<代码>等等。)嘿,谢谢你提醒我,是的,如果我错过了真实的东西,我会抓住它的。只是对这些linq查询有点愚蠢!当我尝试分配到投影对象pageid=g.pageid时,它不允许我这样做,因为此时g是一个集合,因此不包含参数。你能提交你的解决方案的完整版本吗?如果我很愚蠢,对不起!我现在还在努力让它工作!