将 T-SQL string_agg 转换为 LINQ C#

2023-12-05

我正在尝试将 T-SQL 查询转换为 LINQ。

我的查询:

SELECT l.Id, s.SystemSerial, v.LicenseVersion, l.CreatedDate, STRING_AGG (sf.[Name], ',') as Features
FROM [system] AS s
LEFT OUTER JOIN SoftwareLicense AS l ON l.SystemId = s.id
LEFT OUTER JOIN SoftwareVersion as v ON l.SoftwareVersionId = v.Id
LEFT OUTER JOIN FeatureLicense as fl ON fl.SoftwareLicenseId = l.Id AND fl.IsActive = 1
LEFT OUTER JOIN SoftwareFeature as sf ON sf.Id = fl.SoftwareFeatureId
GROUP BY l.id, s.SystemSerial, v.LicenseVersion, l.CreatedDate

上面的查询返回以下内容:

267     DELL-H99DHM2        1.0     2019-05-06T13:19:59.3081543     Advanced,Internal
270     DESKTOP-SLL5NLC     1.0     2019-05-06T19:22:19.5161704     Standard,Video
271     DESKTOP-T67FIK1     1.0     2019-05-06T19:30:50.6251582     Advanced,Internal,Video
272     DESKTOP-T67FIK1     1.1     2019-05-07T11:30:50.2351512     Advanced

我原来的 LINQ 查询(在我添加之前STRING_AGG)看起来像这样:

var allSystemsAndLicenses = (from s in _context.Systems
                            join sl in _context.SoftwareLicenses on s.Id equals sl.SystemId into sll
                            from sl2 in sll.DefaultIfEmpty()
                            join sv in _context.SoftwareVersions on sl2.SoftwareVersionId equals sv.Id into svv
                            from sv2 in svv.DefaultIfEmpty()
                            join fl in _context.FeatureLicenses on sl2.Id equals fl.SoftwareLicenseId into fll
                            from fl2 in fll.DefaultIfEmpty().Where(a => a.IsActive)
                            join sf in _context.SoftwareFeatures on fl2.SoftwareFeatureId equals sf.Id into sff
                            from sf2 in sff.DefaultIfEmpty()
                            select new SystemLicenseResult
                            {
                                LicenseId = sl2.Id,
                                SerialNumber = s.SystemSerial,
                                LicenseVersion = sv2.LicenseVersion + " (" + sv2.Software.Name + ")",
                                LicenseExpiryDate = sl2.CreatedDate,
                                CreatedDate = sl2.CreatedDate
                            });

我正在尝试找出如何表示STRING_AGG (sf.[Name], ',') as Features就像我的 C# 代码中的 LINQ 一样。我有一种感觉,我需要使用 linq 的 GroupBy 功能,或者在选择中进行某种选择?

任何帮助表示赞赏。


我想我明白了!我的代码如下:

var allSystemsAndLicenses = (from s in _context.Systems
    join sl in _context.SoftwareLicenses on s.Id equals sl.SystemId into sll
    from sl2 in sll.DefaultIfEmpty()
    join sv in _context.SoftwareVersions on sl2.SoftwareVersionId equals sv.Id into svv
    from sv2 in svv.DefaultIfEmpty()
    join fl in _context.FeatureLicenses on sl2.Id equals fl.SoftwareLicenseId into fll
    from fl2 in fll.DefaultIfEmpty().Where(a => a.IsActive)
    join sf in _context.SoftwareFeatures on fl2.SoftwareFeatureId equals sf.Id into sff
    from sf2 in sff.DefaultIfEmpty()
    select new SystemLicenseResult
    {
        LicenseId = sl2.Id,
        SerialNumber = s.SystemSerial,
        LicenseVersion = sv2.LicenseVersion + " (" + sv2.Software.Name + ")",
        LicenseExpiryDate = sl2.CreatedDate,
        LicenseFeatures = sf2.Name,
        CreatedDate = sl2.CreatedDate
    });

// I have some predicates defined that I am not putting here, but they do exist.
var filteredResults = allSystemsAndLicenses.Where(predicates);

var groupedResult = filteredResults.GroupBy(a => a.LicenseId);
var result = groupedResult.ToList()
    // Because the ToList(), this select projection is not done in the DB
    .Select(eg => new SystemLicenseResult
        {
            LicenseId = eg.Key,
            SerialNumber = eg.First().SerialNumber,
            LicenseFeatures = string.Join(",", eg.Select(i => i.LicenseFeatures))
        })

这似乎返回与 T-SQL 语句相同的结果视图!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 T-SQL string_agg 转换为 LINQ C# 的相关文章

  • 属性对象什么时候创建?

    由于属性实际上只是附加到程序集的元数据 这是否意味着属性对象仅根据请求创建 例如当您调用 GetCustomAttributes 时 或者它们是在创建对象时创建的 或者 前两个的组合 在由于 CLR 的属性扫描而创建对象时创建 从 CLR
  • 自动从 C# 代码进行调试过程并读取寄存器值

    我正在寻找一种方法来读取某个地址的 edx 注册表 就像这个问题中所问的那样 读取eax寄存器 https stackoverflow com questions 16490906 read eax register 虽然我的解决方案需要用
  • Signalr 在生产服务器中总是陷入长轮询

    当我在服务器中托管应用程序时 它会检查服务器端事件并始终回退到长轮询 服务器托管环境为Windows Server 2012 R1和IIS 7 5 无论如何 我们是否可以解决这个问题 https cloud githubuserconten
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 当 Cortex-M3 出现硬故障时如何保留堆栈跟踪?

    使用以下设置 基于 Cortex M3 的 C gcc arm 交叉工具链 https launchpad net gcc arm embedded 使用 C 和 C FreeRtos 7 5 3 日食月神 Segger Jlink 与 J
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 是否可以执行具有输出参数的 T-SQL 存储过程,同时忽略 SELECT 语句?

    我正在从另一个存储过程调用一个存储过程 并且我调用的过程有一个输出参数 然后我将输出值传输到局部变量中 这一切都很好 但问题是这个过程还有一个select其中的声明 所以当我exec 该过程的结果将在最终结果集中返回 有没有一种方法可以简单
  • 如何在 Team Foundation 上强制发表有意义的签入评论?

    我有一个开发团队有一个坏习惯 他们写道poor签入评论 当我们必须在团队基础上查看文件的历史记录时 这使得它成为一场噩梦 我已经启用了变更集评论政策 这样他们甚至可以在签到时留下评论 否则他们不会 我们就团队的工作质量进行了一些讨论 他们很
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 网络参考共享类

    我用 Java 编写了一些 SOAP Web 服务 在 JBoss 5 1 上运行 其中两个共享一个类 AddressTO Web 服务在我的 ApplycationServer 上正确部署 一切都很顺利 直到我尝试在我的 C 客户端中使用
  • AccessViolationException 未处理

    我正在尝试使用史蒂夫 桑德森的博客文章 http blog stevensanderson com 2010 01 28 editing a variable length list aspnet mvc 2 style 为了在我的 ASP
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new

随机推荐

  • 隐藏具有相同类的所有 div(第一个除外)

    我有 10 个 属于同一类 div class c1 div div class c1 div div class c1 div div class c1 div div class c1 div div class c1 div div
  • MobileFirst OAuth 和注销

    我有一个访问两个适配器的测试应用程序 由引用领域的 SecurityTest 保护的 JavaScript 适配器 一个 Java 适配器 其方法受与同一领域对应的 OAuth 范围保护 如果我遵循这个顺序 一切都会按预期进行 尝试访问 J
  • 在 Windows 服务中模拟用户

    我正在尝试使用以本地系统帐户登录的服务来模拟 Windows 服务中的域用户 到目前为止 我只能通过记录服务并使用用户凭据设置进程来使其工作 如下所示 ProcessStartInfo startInfo new ProcessStartI
  • SwiftUI ForEach 刷新使视图弹出

    我有这样的事情 import SwiftUI struct Overview View ObservedObject var firstArray FirstArray var body some View Group ScrollView
  • 在 C# 中解析 C 头文件

    我正在使用 Visual Studio C 我需要解析 C 头文件以仅提取有关其中包含的函数声明的信息 对于每个函数 我需要名称 返回类型及其参数 如果可能的话 我希望参数按照它们在函数声明中出现的顺序排列 我在网上看到过有关使用 Visu
  • Angular2:ng2-file-upload:无法使用 SystemJS 正确加载它

    我正在使用 systemJS 来管理我的包 因此我已将这些行添加到我的 systemjs 的配置文件中 map ng2 file upload node modules ng2 file upload packages ng2 file u
  • 有没有一个好的 IDE 可以用 Python 构建 GUI 应用程序 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我是一名初学者程序员 在过去的几个月里 我通过使用 delphi 学到了迄今为 止所知道的大部分知识 大约一个月前 我决定尝试一下 python 因
  • Android Gallery(查看)视频(还有缩略图问题)

    目前我们有一个图库视图 我们需要向其中添加图像 视频的缩略图 如果我们已经有了图像 视频的 content URI 我们如何获取已经生成的缩略图 本机图库应用程序显示的缩略图 我们使用的是Android 1 6 Video Thumbnai
  • 为什么显式生命周期注释会触发双重可变借用错误?

    给出的例子为 fn main let v 0u64 let mut a A x hello to string y v a hello a world struct A lt a gt x String y a u64 impl lt a
  • 使用 Jersey 客户端的 HTTPS

    如何使用 Jersey Client API 将 GET 请求发送到在 HTTPS 协议上运行的服务器 有我可以使用的示例代码吗 像这样构建你的客户端 HostnameVerifier hostnameVerifier HttpsURLCo
  • IIS 服务器和 ASP.Net Core - 500.19,httpplatformhandler 标记上的错误代码为 0x8007000d

    当我尝试使用 IIS Server v7 5 启动 ASP Net Core 应用程序时 出现以下错误 我已成功将网站 Visual Studio 中的文件系统选项 发布到特定目录 它可以从 approot web cmd 文件正常启动 但
  • 为 Android 标记信息窗口添加图像

    我正在制作一个 Android 应用程序 在此应用程序中 有一些酒店的标记 当用户单击标记信息窗口时会出现 它应该如下图所示 这是一个网络应用程序 我的导航抽屉片段中有一个列表视图 地图片段有标记 这是我尝试加载信息窗口图像之前的代码Mai
  • Cython 是否提供任何相当简单且有效的方法来迭代 Numpy 数组,就好像它们是扁平的一样?

    假设我想实现 Numpy 的 x 1 在赛通 我可以写 cython boundscheck False cython wraparoundcheck False def add1 np ndarray np float32 t ndim
  • 如何在 HTML5 中播放 3gp 视频?

    使用 HTML5 播放 3gp 文件不起作用 我有 Firefox 16 和 Chromium Version 22 我得到的结果如下 找不到格式和 MIME 类型受支持的视频 这是我使用的代码
  • 替换来自 stdin bash 的 Curl 请求中的 JSON 正文

    我正在尝试使用来自标准输入的输入填充卷曲请求正文中的一个变量 echo 123 curl d query match number XPOST url com 不幸的是 没有被替换 我希望请求的正文与以下内容相匹配 query match
  • 使用 smtp 时 Hotmail SSL3 版本号错误

    我正在尝试使用 python 中的 hotmail smtp 服务器 但是 我的登录尝试出现了明显的 SSL3 版本号错误 如何更改我正在使用的版本以及如何调查此问题 gt gt s connect smtp live com 587 22
  • matplotlib 中的垂直线和水平线

    我不太明白为什么我无法在指定的限制内创建水平和垂直线 我想用这个框绑定数据 然而 双方似乎并没有遵守我的指示 为什么是这样 CREATING A BOUNDING BOX BOTTOM HORIZONTAL plt axhline y 4
  • Rails 中的求和与分组

    我有一个这样定义的表 Name Order Widget Count Bob 12311 6 Nancy 12555 8 BoB 87573 12 Nancy 12929 4 我想这样检索它们 Bob 18 Nancy 12 即 它们的小部
  • VB.Net(或 C#)2008 多线程导入

    我希望构建一个多线程文本导入工具 通常是 CSV 到 SQL Server 2005 并希望在 VB NET 中执行此操作 但我并不反对 C 我有 VS 2008 试用版 只是不知道从哪里开始 谁能指出我可以在哪里查看和使用源代码的方向VE
  • 将 T-SQL string_agg 转换为 LINQ C#

    我正在尝试将 T SQL 查询转换为 LINQ 我的查询 SELECT l Id s SystemSerial v LicenseVersion l CreatedDate STRING AGG sf Name as Features FR