c# - Entity Framework - 合并两行数据

标签 c# entity-framework

我有两个表。

Orders
OrderID | UserID | OrderTotal
1       |    1   |  100
2       |    2   |  110
3       |    1   |  120

Users
UserId | ProprtyType | PropertyValue
1      |     1       |    Kevin
1      |     2       |    Nolan
1      |     1       |    FirstName
1      |     2       |    Surname

使用下面的查询

var query = from orders in context.Orders
join users in context.Users on orders.UserID equals user.UserID
where userData.Type == 211 || userData.Type == 212

1       |    1   |  100 | Kevin
1       |    1   |  100 | Nolan
2       |    2   |  110 | FirstName
2       |    2   |  110 | Surname
3       |    1   |  120 | Kevin
3       |    1   |  120 | Nolan

是否可以在 Entity 框架中合并结果以返回以下内容

1       |    1   |  100 | Kevin     | Nolan
2       |    2   |  110 | FirstName | Surname
3       |    1   |  120 | Kevin     | Nolan

或者

1       |    1   |  100 | Kevin Nolan
2       |    2   |  110 | FirstName Surname
3       |    1   |  120 | Kevin Nolan

谢谢

最佳答案

那个 Users 表的设计真的很糟糕,IMO。如果保留表格布局,请将其重命名为 UserProperties。此外,您的示例代码与您的表格布局或建议的结果不匹配。

话虽这么说,你可以这样做:

var firstnames = from user in context.Users
                 where user.PropertyType == 1
                 select new { Id = user.UserID,
                              Firstname = user.PropertyValue };

var lastnames = from user in context.Users
                where user.PropertyType == 2
                select new { Id = user.UserID,
                             Lastname = user.PropertyValue };

var users = from fn in firstnames
            join ln in lastnames on fn.Id equals ln.Id
            select new { Id = fn.Id,
                         Firstname = fn.Firstname,
                         Lastname = ln.Lastname };

var query = from order in context.Orders
            join user in users on order.UserID equals user.Id
            select new { /*what you need to select*/ };

Entity Framework 的一个好处是实际的 SQL 查询会尽可能地延迟。因此,仅查询名字和姓氏不会生成数据库连接。那是以后的事。遗憾的是,您的表设计使得利用 EF 的这些优势变得非常困难。

关于c# - Entity Framework - 合并两行数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8535018/

相关文章:

c# - 类似于 C# 的 jMonkey 引擎

sql-server - Entity Framework Multi-Tenancy 自定义共享表

c# - 两列中的外键和导航属性

c# - 如何从表中添加一些列并在另一个表中显示它们

c# - orderby 无法使用 LINQ 获取子查询中的前 1 个结果

c# - 如何检查 XDocument 是否至少有一个 child ?

c# - 如何在 Visual Studio 中确定当前插入符号位置位于注释 block 中?

c# Grpc Client 无法连接到 localhost 上 docker(for windows) 容器中托管的 Grpc Server

c# - 如何在 .NET 控制台应用程序中加载位图文件

c# - 实体或复杂类型...无法在 LINQ to Entities 查询中构造