求助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 的方式就免了。。。
...全文
946 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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 在等下看有没其他解决方案,午饭前结贴。
回复
相关推荐
发帖
LINQ
创建于2007-12-13

8495

社区成员

.NET技术 LINQ
申请成为版主
帖子事件
创建了帖子
2009-07-29 10:21
社区公告
暂无公告