【问题标题】:Convert this sql command to c# linq将此 sql 命令转换为 c# linq
【发布时间】:2017-09-18 17:12:20
【问题描述】:

我正在尝试将此 tSql 命令转换为 linq 查询。
我想对这些列进行分组。
你能帮帮我吗?

select  vUnit.FK_Unit_ID , Unit.unitNumber, unit.unitTitle , title.featureTitleName
from unit.UnitFeatureValue vUnit
inner join unit.Unit on vUnit.FK_Unit_ID = Unit.ID
inner join unit.FeatureTitle title on vUnit.FK_FeatureTitle_ID = title.ID
where vUnit.FK_Unit_ID = 15 and title.canMoreSelect = 1
group by vUnit.FK_Unit_ID ,unit.unitNumber, unit.unitTitle , title.featureTitleName

【问题讨论】:

  • 请向我们展示您的尝试,我们将帮助您实现。
  • 你的group by的目标是什么,你没有计数或总和或类似的东西
  • 从查询中它被用作select distrinct
  • 如何将 var 查询结果转换为我的类?
  • 使用你的班级new YourClass {...} 而不仅仅是new {...}

标签: linq tsql code-conversion


【解决方案1】:
var query = (
    from v in dbContext.UnitFeatureValue
    join u in dbContext.Unit on v.FK_Unit_ID equals u.ID
    join t in dbContext.FeatureTitle on v.FK_FeatureTitle_ID equals t.ID
    where v.FK_Unit_ID == 15 && t.canMoreSelect == 1
    select  new {
        v.FK_Unit_ID, 
        u.unitNumber, 
        u.unitTitle, 
        t.featureTitleName,
    }).Distinct();

【讨论】:

  • 当SQL有表别名如vUnittitle我推荐使用它们作为范围变量。
  • 我建议不要弄得一团糟。
  • 这听起来像是在说“我建议不要编程”?你为什么在这个网站上?如果您认为自己有更好的方法,您的回答不应该反映这一点吗?
【解决方案2】:

类似的东西

var result = (from v in vUnit 
join u in unit on v.FK_Unit_ID equals u.ID
join t in title on v.FK_FeatureTitle_ID equals t.ID
where v.FK_Unit_ID == 15 and t.canMoreSelect == 1
select new { v.FK_Unit_ID , u.unitNumber, u.unitTitle , t.featureTitleName }).ToList();

【讨论】:

  • 请解释反对意见,并提出更好的建议?
  • 你的连接语法错误,这不会做不同/分组
  • 您看到原始查询了吗?需要分组吗?
  • 这取决于数据。但是您的连接语法仍然是错误的。 = 应该是 equals docs.microsoft.com/en-us/dotnet/csharp/linq/perform-inner-joins
  • (就像注释 = 在 where 子句中应该是 == 并且不需要 (...).ToList()。(并且会破坏可组合性)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-20
  • 1970-01-01
  • 2019-03-25
  • 2015-10-02
  • 1970-01-01
相关资源
最近更新 更多