如何将我的SQL命令转换为lambda表达式?

时间:2014-03-03 10:31:58

标签: c# sql linq lambda nhlambdaextensions

我有这样的SQL查询:

  select top 1 Newsletter_HTML_Tag  from Newsletter_TBL
     where (Newsletter_Category_ID=1)
     order by Creation_Date desc

我还有一个方法,它给出了Newsletter_TBL名为

的所有记录的列表
  

NewsletterGellAll()

我之前尝试过,但它不起作用:

NewsletterGellAll()
   .FirstOrDefault(c => c.NEWSLETTER_CATEGORY_ID == 1)
   .orderby(a => a.Creation_Date)

我该如何解决?

4 个答案:

答案 0 :(得分:0)

首先使用cat == 1查询所有项目,然后命令它获取第一个

NewsletterGellAll().Where(c=>c.NEWSLETTER_CATEGORY_ID==1)
                   .OrderBy(a=>a.Creation_Date)
                   .First();

答案 1 :(得分:0)

如果要复制SQL查询的结果,则应该是OrderByDescending而不是OrderBy

此外,如果您查看您的查询:

NewsletterGetAll()
.FirstOrDefault(c => c.NEWSLETTER_CATEGORY_ID == 1)
.OrderBy(a => a.Creation_Date)

在SQL中这没关系,因为它会在ORDER BY表达式之前评估TOP。但是,在Linq中,它将采用与该类别匹配的第一条记录,然后订购该单条记录。所以这甚至不会构建,你不能对单个项目进行排序。

因此它应该是

NewsletterGetAll()
.Where(c => c.NEWSLETTER_CATEGORY_ID == 1)
.OrderByDescending(c => c.Creation_Date)
.FirstOrDefault();

答案 2 :(得分:0)

当您不确定不满足条件时,始终建议使用First或Default,因为这也将处理null情况。意味着,如果没有记录(具有特定条件)。

取决于订单到日期,这里考虑日期是升序,(旧日期优先)

NewsletterGellAll().Where(c=>c.NEWSLETTER_CATEGORY_ID==1)
                    .OrderBy(a=>a.Creation_Date)
                    .FirstOrDefault();

答案 3 :(得分:0)

使用LINQPad并进行专业的LINQ和SQL查询。这是linqpad