我有以下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查询,我们能够缩小我们想要的那个集合的实际修订版本号。
答案 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表达式。