如何将这个简单的SQL查询转换为Linq语句?

时间:2011-06-10 16:32:59

标签: c# sql linq

我有以下SQL语句,它通过一个表并根据数据定义选择一组结果。从该组中,我获得该组的最高修订版的单个结果。现在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();

使用两个变量使我们能够缩小我们正在寻找的工作表集合,然后在第二个var上使用linq查询,我们能够缩小我们想要的那个集合的实际修订版本号。

2 个答案:

答案 0 :(得分: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表达式

答案 1 :(得分:0)

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

非常适合创建和测试针对sql和Odata Web服务的linq表达式。