c# - LINQ中的Case查询相当于sql查询

标签 c# sql linq

我有一个包含调用者、被调用者字段的数据集,我需要一些 LINQ 查询来操作此数据集,相当于此 SQL 查询

SELECT CASE
     WHEN caller < callee THEN callee
     ELSE caller
   END      AS caller1,
   CASE
     WHEN caller < callee THEN caller
     ELSE callee
   END      AS caller2,
   Count(*) AS [Count]
    FROM   YourTable
   GROUP  BY CASE
        WHEN caller < callee THEN callee
        ELSE caller
      END,
      CASE
        WHEN caller < callee THEN caller
        ELSE callee
      END 

最佳答案

这就是你所追求的吗?

DataSet dataSet = new DataSet();
DataTable dataTable = new DataTable("dataTable");

dataTable.Columns.Add("caller", typeof(String));
dataTable.Columns.Add("callee", typeof(String));

dataTable.Rows.Add("999", "888");
dataTable.Rows.Add("888", "999");
dataTable.Rows.Add("999", "555");
dataTable.Rows.Add("555", "333");
dataTable.Rows.Add("555", "999");

dataSet.Tables.Add(dataTable);

string filter = "999";

var result = dataSet.Tables["dataTable"].Select().Select(dr =>
    new
    {
        caller1 = StringComparer.CurrentCultureIgnoreCase.Compare(dr["caller"], dr["callee"]) < 0 ? dr["callee"] : dr["caller"],
        caller2 = StringComparer.CurrentCultureIgnoreCase.Compare(dr["caller"], dr["callee"]) < 0 ? dr["caller"] : dr["callee"]
    })
        .Where(dr => String.IsNullOrEmpty(filter) || dr.caller1 == filter || dr.caller2 == filter)
        .GroupBy(drg => new { drg.caller1, drg.caller2 } )
        .Select(drg => new { drg.Key.caller1, drg.Key.caller2, count = drg.Count() });

关于c# - LINQ中的Case查询相当于sql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12891262/

相关文章:

c# - 有没有办法从某种类型的 JSON.NET JObject 中删除节点?

c# - 用于 Windows Azure 崩溃的 DevFC.exe(Development Fabric)

sql - 在 Redshift 中将时间戳转换为整数

vb.net - 如何将 linq 查询的结果转换为 List(Of T)

linq - NUnit:断言IEnumerable是否包含某种类型的对象的最简洁方法是什么?

c# - 如何获取列表中值的列总计 - 匿名类型的 double

c# - WinRT 媒体元素 : Detect changes from fullscreen to normal when IsFullWindow is true and AreTransportControlsEnabled is true

mysql - SQL:选择其他表中不存在的位置

java - 将变量从 java 传递到 SQL IN 子句

c# - 使用 linq 根据日期之间获取结果