linq中使用case when

select中使用case when
linq代码:

Products.Select(P => new
{
  ID = P.ProductID,
  Name = P.Name,
  Color = P.Color,
  Price = (P.Color == "Red" ? P.StandardCost : (P.Color == "Black" ? P.StandardCost + 10 : P.ListPrice))
});

sql原型:
SELECT ProductID, Name, Color,
    CASE
      WHEN Color = 'Red' THEN StandardCost
      WHEN Color = 'Black' THEN StandardCost + 10
      ELSE ListPrice   
    END Price
FROM SalesLT.Product
 
 
where中使用case when
linq代码:
Products
.Where(P => (P.Color == "Red" ? (P.StandardCost > 100) : (P.Color == "Black" ? P.ListPrice > 100 : P.ListPrice == P.StandardCost)))
.Select(P => new
{
  ID = P.ProductID,
  Name = P.Name,
  Color = P.Color,
  StandardCost = P.StandardCost,
  ListPrice = P.ListPrice
});
sql原型:
SELECT ProductID, Name, Color, StandardCost, ListPrice
FROM SalesLT.Product
WHERE (
  (CASE
    WHEN Color = 'Red' THEN
      (CASE
        WHEN StandardCost > 100 THEN 1
        WHEN NOT (StandardCost > 100) THEN 0
        ELSE NULL
       END)
    WHEN Color = 'Black' THEN
      (CASE
        WHEN ListPrice > 100 THEN 1
        WHEN NOT (ListPrice > 100) THEN 0
        ELSE NULL
       END)
    ELSE
      (CASE
        WHEN ListPrice = StandardCost THEN 1
        WHEN NOT (ListPrice = StandardCost) THEN 0
        ELSE NULL
       END)
   END)) = 1
 
 
 
group by中使用case when
linq代码:
Products.GroupBy(P => P.StandardCost > 1000? P.Color : P.SellStartDate.ToString())
 
sql原型:
-- Region Parameters
DECLARE @p0 Decimal(8,4) = 1000
-- EndRegion
SELECT [t1].[value] AS [Key]
FROM (
  SELECT
    (CASE
      WHEN [t0].[StandardCost] > @p0 THEN CONVERT(NVarChar(MAX),[t0].[Color])
      ELSE CONVERT(NVarChar(MAX),[t0].[SellStartDate])
     END) AS [value]
  FROM [SalesLT].[Product] AS [t0]
  ) AS [t1]
GROUP BY [t1].[value]
GO

转载于:https://www.cnblogs.com/Mh201454/p/3904097.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LINQ(Language Integrated Query)是.NET框架的一种查询语言,用于对各种数据源进行查询和操作。在LINQ,JOIN操作用于将两个或多个数据源的元素进行关联。CASE WHEN语句是SQL的条件语句,用于根据不同的条件执行不同的操作。 在LINQ,JOIN操作可以使用join关键字来实现。JOIN操作可以在两个数据源之间建立关联,并根据指定的条件将它们连接起来。JOIN操作可以用于不同类型的数据源,如集合、数组、数据库表等。 CASE WHEN语句在LINQ可以使用条件表达式来实现。条件表达式可以根据不同的条件返回不同的结果。在LINQ,可以使用条件表达式来对查询结果进行筛选、排序或其他操作。 下面是一个示例代码,演示了LINQ的JOIN操作和CASE WHEN语句的使用: ```csharp var customers = new List<Customer> { new Customer { Id = 1, Name = "John" }, new Customer { Id = 2, Name = "Alice" }, new Customer { Id = 3, Name = "Bob" } }; var orders = new List<Order> { new Order { Id = 1, CustomerId = 1, Product = "Product A" }, new Order { Id = 2, CustomerId = 2, Product = "Product B" }, new Order { Id = 3, CustomerId = 1, Product = "Product C" } }; var result = from c in customers join o in orders on c.Id equals o.CustomerId select new { CustomerName = c.Name, OrderProduct = o.Product, OrderStatus = (o.Id % 2 == 0) ? "Even" : "Odd" }; foreach (var item in result) { Console.WriteLine($"Customer: {item.CustomerName}, Order: {item.OrderProduct}, Status: {item.OrderStatus}"); } ``` 上述代码,我们定义了两个类Customer和Order,分别表示客户和订单。通过LINQ的JOIN操作,我们将两个数据源customers和orders关联起来,并使用CASE WHEN语句根据订单的Id判断其奇偶性,将结果存储在result变量,并进行输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值