求助linq 的写法,实现 sql里面case的用法

歪歪 2009-07-29 10:21:41
如题,求助linq 的写法,实现 sql里面case的用法

select Id,UserId,dj=case CashNumber when 5 then 'a' when 20 then 'b' else 'c' end from UserLoger

我如何写linq语句能实现上面的sql语句或者同样的功能。

先谢谢

DataContext.ExecuteQuery 的方式就免了。。。
...全文
1055 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
liutingrex 2009-11-18
  • 打赏
  • 举报
回复
http://lancefisher.net/blog/archive/2008/05/07/linq-to-sql---case-statements.aspx
歪歪 2009-07-29
  • 打赏
  • 举报
回复
算了,结贴,小总结,方便查找类似问题的朋友可以参考:

三四项简单的处理可以用三目表达式直接写;
四项以上或者有复杂的处理最好就使用外接函数或者自定义数据库函数或者数据库存储过程了。

我最后使用的外接函数的方法,因为有六项,三目表达式对代码的可读性确实有点考验,或者说是感觉上不怎么爽,而外接函数对性能方面的影响是可以接受的,我这的每页只显示10条记录。

当然另外还有个解决方法就是数据原样输出,然后在客户端用js来处理,呵呵。
歪歪 2009-07-29
  • 打赏
  • 举报
回复
多谢 Sandy945

select new {
ul.Id,
ul.UserId,
dj= ul.CashNumber == 5 ? "a" : (ul.CashNumber == 20 ? "b" : "c")
}

这个方式确实能生成sql对应的case语句,但是我dj如果是六项的话这个写法就有点郁闷了。

另外种方式自己写函数

select new {
ul.Id,
ul.UserId,
dj= GetUserDJ(ul.CashNumber)
}

private string GetUserDJ(int cashNumber){
........
}

他生成的sql语句把参数单独出来和我函数的参数名称一致了,就是类似
select [t0].[CashNumber] AS [cashNumber] ...
如果我函数参数是 private string GetUserDJ(int xyz)
他则生成
select [t0].[CashNumber] AS [xyz] ...
而未看到其他处理,说明是他查询后再在.NET Framework里面处理的,这样对于多项确实方便了些,但是性能估计要打些折扣。

还是谢谢 Sandy945 在等下看有没其他解决方案,午饭前结贴。
阿非 2009-07-29
  • 打赏
  • 举报
回复

8,494

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧