2012-08-09 46 views
-4

所需SQL相当于:SQL的LINQ语法

select * from polls where (id=(select max(id) from polls where publish_at=(select max(publish_at) from polls where publish_at<='2012-08-10 00:00:00')) and status=1) 

我已经试过这一点,但它给空,而应返回一行。

var qry = db.Polls.Where(p => p.id == db.Polls.Where(x => x.publish_at == db.Polls.Max(y => y.publish_at) && x.publish_at <= System.DateTime.Today).Max(x => x.id) && p.status.Equals(PollStatus.Active)).FirstOrDefault(); 
+6

[什么都有哟你尝试过吗?](http://WhatHaveYouTried.com) – 2012-08-09 15:00:05

+1

虽然你只有两个问题有不被接受的答案,但由此产生的百分比在这里反映不佳;考虑接受其他问题中的至少一个答案。 – KeithS 2012-08-09 15:06:50

+0

嘿谢谢keith S让我意识到这一点和Juergen是的,我已经尝试并更新了我的答案。在此回复的帮助下,我们在这里提供帮助! – user1511069 2012-08-10 10:51:55

回答

1

一种方法是这样的:

db.polls.Where(p => p.id == polls.Where(x => x.publish_at == polls.Max(y => y.publish_at)).Max(x => x.id)); 

这样的另一种方式:

from p in db.polls 
where p.id == (from x in db.polls 
       where x.id == (from y in db.polls 
           where y.publish_at == db.polls.Max(y => y.publish_at) 
           select y.id).Max()) 
       select x.id).Max()) 
select p; 
+0

中查看更新,并请在问题中查看更新 – user1511069 2012-08-10 09:00:02

0
var query = from p in context.Polls 
      where p.id == (from p2 in context.Polls 
          where p2.publish_at == context.Polls.Max(x => x.publish_at) 
          select p2).Max(y => y.id) 
      select p; 
+0

请在问题 – user1511069 2012-08-10 08:59:21

0

这精美的作品:

var qry = db.Polls.Where(p => p.id == db.Polls.Where(x => x.publish_at == db.Polls.Where(y => y.publish_at<=System.DateTime.Today).Max(y=>y.publish_at)).Max(x => x.id) && p.status.Equals(PollStatus.Active)).FirstOrDefault();