当前位置: 首页 > 面试题库 >

使用行值作为列LINQ C#SQL合并表

荣俊
2023-03-14
问题内容

我有一张users桌子:

Id  | Name   | Age
-------------------- 
1   | Steve  | 21
2   | Jack   | 17
3   | Alice  | 25
4   | Harry  | 14

我还有一个包含其他用户信息的表:

UId | Key    | Value
---------------------- 
1   | Height | 70
2   | Height | 65
2   | Eyes   | Blue
4   | Height | 51
3   | Hair   | Brown
1   | Eyes   | Green

UId列链接到表中的Idusers。如您所见,并非所有用户都具有相同的附加信息。爱丽丝(Alice)没有身高值,杰克(Jack)是唯一拥有眼睛颜色值等的人。

有没有一种方法可以使用C#LINQ查询将该数据动态地组合到一个表中,因此结果是这样的:

Id  | Name   | Age | Height | Eyes  | Hair
------------------------------------------ 
1   | Steve  | 21  |   70   | Green |     
2   | Jack   | 17  |   65   | Blue  |       
3   | Alice  | 25  |        |       | Brown   
4   | Harry  | 14  |   51   |

如果用户没有该列的值,则它可以保持为空/空。这是否需要某种数据透视?


问题答案:

对于这种情况,您的用户信息字段是恒定的:

 var result = users.GroupJoin(details,
            user => user.Id,
            detail => detail.Id,
            (user, detail) => new
            {
                user.Id,
                user.Name,
                user.Age,
                Height = detail.SingleOrDefault(x => x.Key == "Height").Value,
                Eyes = detail.SingleOrDefault(x => x.Key == "Eyes").Value,
                Hair = detail.SingleOrDefault(x => x.Key == "Hair").Value,
            });


 类似资料:
  • 问题内容: 我在C#方面非常有经验,但是仍然还是SQL的初学者。 我们有一个使用MSSQL数据库的C#应用​​程序。 我们的应用程序的一部分只是简单地编写一系列预查询,作为报告,通过简单地运行查询并将返回的表粘贴到gridView即可显示该报告。用户正在请求一个新的报表,我不能完全确定仅使用SQL还是可以的,并且需要对返回的数据进行处理才能使其看起来正确。 用户想要的数据(以他们希望的方式呈现)将

  • 问题内容: 我们有些SQL杂语。说我有一个看起来像这样的结果… 61E77D90-D53D-4E2E-A09E-9D6F012EB59C | A 61E77D90-D53D-4E2E-A09E-9D6F012EB59C | B 61E77D90-D53D-4E2E-A09E-9D6F012EB59C | C 61E77D90-D53D-4E2E-A09E-9D6F012EB59C | D 7ce9

  • 问题内容: 我有一张桌子,我在其中存储合同的交易,如下所示: 用户应该能够选择查询的时间跨度,我要归档的是,如果用户从01/2012-03-2012中选择一个时间跨度,他会得到结果: 您对我有什么建议吗? 最好的问候,r3try 编辑:非常感谢您的答复!当我搜寻我的问题时,我也偶然发现了旋转问题,但是到目前为止,我还没有找到一个可以真正解决我的问题的示例(因为基本上每个示例都为列条目提供了特定的可

  • 我有这些数据 我想把它变成 < li >我想将列名用作< code>category列的值标签。 < li >每行最多只有一个< code>True值。 这就是MWE 我可以做 。但是,熊猫自己的工具不是有更优雅的方式吗?

  • 问题内容: 我正在使用SQL Server 2008 R2作为排队机制。我将项目添加到表中,并且外部服务读取并处理这些项目。这很有效,但是缺少一件事- 我需要一种机制,我可以尝试从表中选择一行,如果没有一行,则阻塞直到出现(最好是在特定时间段内)。 谁能建议我如何实现这一目标? 问题答案: 我需要一种机制,通过该机制,我可以尝试从表中选择一行,如果没有一行,则阻塞直到有一行(最好是在特定时间段内)

  • 问题内容: 我有一个SQL查询 我希望结果应该是。 请帮帮我!! 问题答案: 试试这个: