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 查询的主要内容,如果未能解决你的问题,请参考以下文章