当前版本的LINQ语法

时间:2012-01-11 17:24:45

标签: c# linq exception-handling group-by oracle11g

如何使用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

3 个答案:

答案 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