2011-06-10 45 views
0

我有以下SQL语句正在经历一个表并根据数据定义选出一组结果。从该组中,我得到了该组的最高版本的单个结果。现在SQL很容易,但是到目前为止,将它转换为Linq并没有产生任何我可以使用的东西。有人能帮忙吗?如何将这个简单的SQL查询转换成Linq语句?

select * from datasheet ds where ds.revisionnum = 
(select max(revisionnum) from datasheet where datadefinitionid = 34) 
     and ds.isparent = 1 -- is parent will be true for this query 

这是关于据我得到与LINQ的声明,我偶然发现前:

var query = from ds in context.DataSheets 
      where ds.IsParent == true 
      && ds.RevisionNum --- ????? 

提前感谢!

代码更新

摸索了一段时间后,这就是我们想出了:

var dataSheet = _dataSheetRepository.All.Where(
          d => d.DataDefinitionID == i.ID && 
          d.IsParent == true); 

var currentDataSheet = (from ds in dataSheet 
         where (ds.RevisionNum == (from s in dataSheet select 
         s.RevisionNum).Max()) select ds).SingleOrDefault(); 

使用两个变量让我们来缩小这片集,我们正在寻找的能力for,然后在第二个var上使用linq查询,我们可以缩小该集合的实际版本号。

回答

3

尝试类似的东西

var query = from ds in context.DataSheets 
      where ds.IsParent == true 
      && ds.RevisionNum == context.DataSheets.Where(
            ds => ds.DataDefinitionId == 34).Max(
            ds => ds.RevisionNum) 

子查询可以转换成LINQ表达式以及

+2

唉......每当我看到一个布尔值被检查为“真”或“假”时,我的眼睛都很疼...... – 2011-06-10 16:42:57

+0

实际上有时它会使代码更具可读性。但在这种情况下,我同意,这似乎是多余的。 – Andrei 2011-06-10 16:45:22

+0

我认为这是个人偏好,但通常它会告诉我编写代码的人并不真正理解布尔表达式。 – 2011-06-10 17:45:35

0

我可以向您推荐工具http://www.linqpad.net/

它用于创建和测试LINQ针对SQL表达式是伟大的, Odata网络服务。