如何使用C#和LINQ编写此SQL语句?我正在查询Oracle数据库,该表有多个记录修订版。因此,我希望onyl包含在表中的每条记录的当前版本。
SQL看起来像这样:
select TP_ID, TP_TEXT, TP_DEFN_SAKEY
from TP_DEFN tp1
where tp1.TP_ACTIVE_FLAG = 'Y' and
tp1.FAMILY_ID = 1 and
tp1.TP_DEFN_REV_DTS = (select max(TP_DEFN_REV_DTS)
from TP_DEFN tp2
where tp2.family_id = tp1.family_id and tp2.tp_id = tp1.tp_id )
order by TP_ID
TP_DEFN_REV_DTS
是存储当前版本的日期时间字段。
我是LINQ的初学者,一直在努力寻找可行的解决方案。每当我尝试在LINQ查询中进行分组时,我都会收到错误
不支持GroupBy
答案 0 :(得分:0)
脱离我的头脑,不知道你正在使用哪个LINQ提供商......
var q = from tp1 in Context.TP_DEFN
where tp1.TP_ACTIVE_FLAG == "Y"
&& tp1.FAMILY_ID == 1
&& tp1.TP_DEFN_REV_DTS
== Context.TP_DEFN.Where(tp2 => tp2.FAMILY_ID == tp1.FAMILY_ID
&& tp2.TP_ID == tp1.TP_ID)
.Max(tp2 => tp2.TP_DEFN_REV_DTS)
orderby tp1.TP_ID
select new
{
tp1.TP_ID,
tp1.TP_TEXT,
tp1.TP_DEFN_SAKEY
};
答案 1 :(得分:0)
尝试这样的事情:
var res =
from tp1 in TP_DEFN
where tp1.TP_ACTIVE_FLAG == "Y" &&
tp1.FAMILY_ID == 1 &&
tp1.TP_DEFN_REV_DTS == (from tp2 in TP_DEFN
where tp2.FAMILY_ID == tp1.FAMILY_ID &&
tp2.TP_ID == tp1.TP_ID
select tp2.TP_DEFN_REV_DTS).Max()
orderby tp1.TP_ID
select new
{
tp1.TP_ID,
tp1.TP_TEXT,
tp1.TP_DEFN_SAKEY
};
答案 2 :(得分:0)
如果您正在使用实体框架或linq-to-sql,您可以根据需要直接传递直接sql(尽管这会阻止更改跟踪,至少在默认情况下是这样)。
对于EF,请使用ObjectContext.ExecuteStoreQuery:http://msdn.microsoft.com/en-us/library/dd487208.aspx
对于L2S,请使用DataContext.ExecuteQuery:http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.executequery.aspx