Sql查询转Linq查询

本文关键字:查询 Linq Sql | 更新日期: 2023-09-27 18:14:09

我写了一个类似

的sql查询
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中写这个查询的方法

Sql查询转Linq查询

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

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 }

这个错误很简单,你把圆括号放错了。

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();