请问 linq 怎样写 case when 语句?

liuning623 2008-05-12 05:34:50
SQL: select case SellMode when 1 then SellNum when 2 then -SellNum when 3 then 0 end as SellNum from Sell

我知道如果只有2个case的话可以写成 ?: 的形式,但是有多个的话该怎么写呢?难道非要使用嵌套的 ?: 吗?
...全文
1917 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangjun147 2011-04-06
  • 打赏
  • 举报
回复
顶一下,我也遇到相同的问题了
顺便也看了LZ和大胡子的矛盾
在谴责LZ因为不细心不小心关了别人回答过的帖子的同时
更鄙视大胡子素质低,贴的代码确实有问题
liuning623 2008-05-15
  • 打赏
  • 举报
回复
至于这个帖子是无满意结贴,是因为我在LINQ板块里也发了同样的一篇帖子,那篇没有人回复,本来想关掉那个帖子的,但是不小心把这边的给关了。
patrickpan ,仅仅20分就让你失去了一个程序员应有的风格,自己帖的代码跑都不跑就放出来回复,还骂人,无语了。。。。顺便想鄙视你一下!
liuning623 2008-05-15
  • 打赏
  • 举报
回复
楼上的,请你说话放尊重点,也请你在贴出来代码以前测试一下,你看看4楼的回复,我不是说得很清楚了不能跑了吗???你这样的也叫程序员??顺便告诉一下,给出的分数就算不给分自己也不会拿回去,被系统回收了!!!!
patrickpan 2008-05-14
  • 打赏
  • 举报
回复
垃圾,你首先提问的是:
SQL: select case SellMode when 1 then SellNum when 2 then -SellNum when 3 then 0 end as SellNum from Sell
我知道如果只有2个case的话可以写成 ?: 的形式,但是有多个的话该怎么写呢?难道非要使用嵌套的 ?: 吗?

我的回复正好解决你的问题。

你后来又怎样用的?
你在5楼的回复谁知道你要干什么?
有这样的用法吗?你怎么不直接写出你的目的,是你自己演绎出现的错误。
并不是仅仅因为20分的问题,这是对别人劳动的不尊重。
比较气愤。顺便投诉你一下。
liuning623 2008-05-13
  • 打赏
  • 举报
回复
LINQ 语句是这样的:
var sell = from s in db.Sell
group s by new { s.SellStore, s.GoodID } into sInto
select new
{
StoreID = sInto.Key.SellStore,
GoodID = sInto.Key.GoodID,
SellNum = sInto.Sum(item => NumberConverter(item.SellMode ?? new char(), Convert.ToInt32(item.TotalSellNum ?? 0)))
};
liuning623 2008-05-13
  • 打赏
  • 举报
回复
不行,他会报错 “Int32 NumberConverter(Char, Int32)”不支持转换为 SQL。"

我这个函数原型是这样的:
private int NumberConverter(char sellMode, int sellNum)
{
switch (sellMode)
{
case '2':
return -sellNum;
case '5':
case '8':
return 0;
default:
return sellNum;
}
}
patrickpan 2008-05-13
  • 打赏
  • 举报
回复
请参考:
LocalMethodCall形式
这个例子InternationalPhone调用本地方法PhoneNumberConverter
[Code=C#]
var q = from c in db.Customers
where c.Country == "UK" || c.Country == "USA"
select new
{
c.CustomerID,
c.CompanyName,
Phone = c.Phone,
InternationalPhone =
PhoneNumberConverter(c.Country, c.Phone)
};

public string PhoneNumberConverter(string Country, string Phone)
{
Phone = Phone.Replace(" ", "").Replace(")", ")-");
switch (Country)
{
case "USA":
return "1-" + Phone;
case "UK":
return "44-" + Phone;
default:
return Phone;
}
}
[/Code]
patrickpan 2008-05-13
  • 打赏
  • 举报
回复
select case SellMode when 1 then SellNum when 2 then -SellNum when 3 then 0 end as SellNum from Sell
可以这样:
[Code=C#]
var query = from c in Sell
select new {
SellMode = NumberConverter(c.SellMode);
}

public int NumberConverter(int sellMode)
{
switch (sellMode)
{
case 1
return sellMode;
case 2
return 0 - sellMode;
default:
return 0;
}
}
[/Code]
liuning623 2008-05-13
  • 打赏
  • 举报
回复
难道 CSDN 里就没有人会这个?

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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