我有两个表。
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/