Sql 查询到 Linq 查询

Posted

技术标签:

【中文标题】Sql 查询到 Linq 查询【英文标题】:Sql Query to Linq Query 【发布时间】:2015-09-22 12:33:31 【问题描述】:

我写了一个类似的sql qyery

SELECT TOP 1000 
  [tlotWeight]
  ,[TEU]
  ,[SeaAirFlag]
  ,CASE 
  WHEN [SeaAirFlag]='SEA' OR [SeaAirFlag]='Sea' 
  then [TEU]  
  else [tlotWeight] end as Volume
FROM [LogisticsBI].[dbo].[GoldenVolume]

我希望它将它转换为 linq c# 查询,我已经尝试过类似的方法

(from t in db.GoldenVolumes
 select new  Volume=(t.SeaAirFlag=="SEA"|| t.SeaAirFlag=="Sea")?t.TEU: t.tlotWeight)
 ).Take(10000).Distinct()

但它在 linqpad 中显示一些语法错误 请帮助我纠正 linq 中编写此查询的方法

【问题讨论】:

"但它显示了一些语法错误" - 你到底遇到了什么错误?这里没有读心者...... 错误是:语法错误,','预期)预期 使用 LINQPad 帮助简化 LINQ 语法en.wikipedia.org/wiki/LINQPad (from t in db.GoldenVolumes select new Volume = (t.SeaAirFlag=="SEA"|| t.SeaAirFlag=="Sea") ? t.TEU : t.tlotWeight ).Take(10000).Distinct(); 小错别字并不真正属于 SO。如果您自己花几分钟时间,您应该能够找到错误。 【参考方案1】:

好吧,我看到这里的括号有问题(打开一次,关闭两次):

select new  Volume = (t.SeaAirFlag=="SEA" || t.SeaAirFlag=="Sea") ? t.TEU : t.tlotWeight)

看起来应该是这样

select new  Volume = ((t.SeaAirFlag=="SEA" || t.SeaAirFlag=="Sea") ? t.TEU: t.tlotWeight)

或者(由你决定)

select new  Volume = (t.SeaAirFlag=="SEA" || t.SeaAirFlag=="Sea") ? t.TEU: t.tlotWeight 

【讨论】:

【参考方案2】:

错误很简单,您的圆括号排列错误。

t.tlotWeight)) 是错误的,应该是 t.tlotWeight)

为了更清晰,最好将它们拆分到下一行。

    var res = (from t in db.GoldenVolumes
                   select new
                   
                       Volume = (t.SeaAirFlag.ToUpperInvariant().Contains("SEA")) ?
                           t.TEU  : t.tlotWeight
                   )

                   .Take(10000)
                   .Distinct();

【讨论】:

以上是关于Sql 查询到 Linq 查询的主要内容,如果未能解决你的问题,请参考以下文章

从LINQ到SQL获取SQL查询?

具有XPath查询的SQL到LINQ转换

创建从 linq 到 SQL 查询输出的特定 json 响应?

如何将参数从 LINQ 查询传递到 SQL 视图?

在linq中将sql查询转换为linq new

为什么这个短路不能在linq到sql查询中工作?