【问题标题】:Whats this sql in linq? [closed]linq中的这个sql是什么? [关闭]
【发布时间】:2012-12-13 15:59:08
【问题描述】:

我不知道如何将其转换为 Linq。任何帮助表示赞赏!

SELECT distinct top 5 searchterm, created
FROM
(   SELECT searchterm, created ,ROW_NUMBER() 
    over(partition by searchterm order by created) Ordresults, createdby
    FROM searchhistory 
) A
WHERE A.Ordresults = 1 and A.CreatedBy = 'USERNAME'
ORDER BY A.Created DESC

【问题讨论】:

  • 从此开始... var q = (from sh in EM.SearchHistory where sh.CreatedBy == user orderby sh.Created 降序选择 sh).Distinct().Take(5);

标签: sql linq entity-framework tsql linq-to-sql


【解决方案1】:

这样的事情应该可以工作:

查询语法:
不支持Take,所以必须作为扩展方法调用:

var query = (from term in EM.SearchHistory
            group term by term.searchterm into g
            let item = new 
            { 
                searchterm = g.Key, 
                first = g.OrderBy(t => t.created).First(),
            }
            where item.first.createdby == "USERNAME"
            orderby item.first.created
            select new
            {
                item.searchterm,
                item.first.created,
            })
            .Take(5)
;

方法语法:

var query = EM.SearchHistory
    .GroupBy(term => term.searchterm)
    .Select(g => new 
    {
        searchterm = g.Key, 
        first = g.OrderBy(t => t.created).First(),
    })
    .Where(item => item.first.createdby == "USERNAME")
    .OrderBy(item => item.first.created)
    .Select(item => new
    {
        item.searchterm,
        item.first.created,
    })
    .Take(5)
;

【讨论】:

  • 非常好,只需要稍作修正,但工作完美。
【解决方案2】:

最后一点代码,如果它对其他人有帮助的话......

        var query = (from term in EM.SearchHistories
                     group term by term.SearchTerm into g
                     let item = new
                     {
                         searchterm = g.Key,
                         first = g.OrderBy(t => t.Created).FirstOrDefault(),
                     }
                     where item.first.CreatedBy == "USERNAME"
                     orderby item.first.Created
                     select new
                     {
                         item.searchterm,
                         item.first.Created,
                     })
        .Take(5);

【讨论】:

    猜你喜欢
    • 2012-04-19
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    相关资源
    最近更新 更多