【问题标题】:translating sql statement to linq将sql语句翻译成linq
【发布时间】:2013-03-25 10:20:54
【问题描述】:

我有一个有效的 sql 语句,并希望它作为 linq 语句或 linq 方法链。

我的声明是:

 SELECT T1.*
   FROM (SELECT Col1, MAX(InsertDate) as Data
         FROM Zugbewegungsdaten
         GROUP BY Loknummer) as temp JOIN T1
     ON (T1.Col1= temp.Col1
         AND Zugbewegungsdaten.InsertDate= temp.Date)
   WHERE Col3=1
ORDER BY Loknummer

谁能帮我翻译一下?

评论后编辑:

好的,我的内部选择结果:

var maxResult = (from data in context.T1
                group data by data.Col1
                 into groups
               select new
                      {
                         Train = groups.Key,
                         InsertDate= groups.Max( arg => arg.InsertDate)
                       }) ;

我尝试了这样的连接:

 var joinedResult = from data in context.T1
                    join gdata in maxResult on new
                         {
                           data.Col1,
                           data.InsertDate
                         }
                         equals new
                         {
                           gdata.Col1,
                           gdata.InsertDate
                         }
                    select data;

但是我得到一个类型参数无效的连接的编译器错误。

如果连接有效,我应该使用 where 来过滤joinedResult。

          var result = from data in joinedResult
                        where data.Col3 == true
                        select data;

【问题讨论】:

  • 如果您自己先尝试一些东西,将它展示给我们并告诉我们它有什么问题,那就更好了。这样,您将能够从我们的答案中学习。如果我们只是为您提供解决方案,那么您下次必须翻译 SQL 查询时必须回来。 -1 表示没有显示任何努力。
  • 感谢您的评论,我添加了我的 wip 代码。

标签: sql linq


【解决方案1】:

经过更多的“尝试和错误”后,我得到了这个版本,它看起来可以正常工作。

var joinedResult = ( ( from data in context.T1
                             group data by data.Col1
                             into g
                             select new
                               {
                                 Key= g.Key,
                                 Date = g.Max( p => p.InsertDate)
                               } ) ).Join( context.T1,
                                           temp => new
                                             {
                                               Key = temp.Key,
                                               InsertDate = temp.Date
                                             },
                                           data => new
                                             {
                                              Key = data.Col1,
                                              InsertDate = data.InsertDate
                                             },
                                           ( temp,
                                             data ) => new
                                               {
                                                 temp,
                                                 data
                                               } )
                                    .Where( arg => arg.data.Col3)
                                    .OrderBy( arg => arg.data.Col1)
                                    .Select( arg => arg.data );

我是否必须通过连接多列来设置相同的属性名称(键、插入日期)?

【讨论】:

  • “我是否必须通过连接多列来设置相同的属性名称(键、插入日期)?” - 是的。引擎还应该如何匹配列?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-14
  • 1970-01-01
  • 1970-01-01
  • 2011-01-01
  • 1970-01-01
相关资源
最近更新 更多