我使用的 OMS 在数据库中每条记录最多存储三个行项目。
下面是一个包含五个订单项的订单示例。
Order Header
Order Detail
Prod 1
Prod 2
Prod 3
Order Detail
Prod 4
Prod 5
一个订单抬头记录和两个明细记录。
我的目标是为详细记录建立一对一的关系(即,每个行项目一个详细记录)。过去,我使用 UNION ALL
SQL 语句来提取数据。是否有使用 LINQ 解决此问题的更好方法?
下面是我第一次尝试使用 LINQ。任何反馈、建议或建议将不胜感激。对于我所读到的内容,UNION
语句可以对流程征税吗?
var orderdetail =
(from o in context.ORDERSUBHEADs
select new {
edpNo = o.EDPNOS_001, price = o.EXTPRICES_001,
qty = o.ITEMQTYS_001 }
).Union(from o in context.ORDERSUBHEADs
select new { edpNo = o.EDPNOS_002, price = o.EXTPRICES_002,
qty = o.ITEMQTYS_002 }
).Union(from o in context.ORDERSUBHEADs
select new { edpNo = o.EDPNOS_003, price = o.EXTPRICES_003,
qty = o.ITEMQTYS_003 });
最佳答案
Id 构建一个简单的子类
class Record
{
public object SubHeading { get; set; }
public int EdpNo { get; set; }
public decimal Price { get; set; }
public int Quantity { get; set; }
}
然后你就循环一遍
var orders = context.ORDERSUBHEADs.Select(o =>
new Record[] {
new Record { SubHeading = o, EdpNo = o.EDPNOS_001, Price = o.EXTPRICES_001, Quantity = o.ITEMQTYS_001 },
new Record { SubHeading = o, EdpNo = o.EDPNOS_002, Price = o.EXTPRICES_002, Quantity = o.ITEMQTYS_002 },
new Record { SubHeading = o, EdpNo = o.EDPNOS_003, Price = o.EXTPRICES_003, Quantity = o.ITEMQTYS_003 }
}
);
IEnumerable allOrders = IEnumerable.Empty;
foreach(Record[] r in orders)
allOrders = allOrders.Concat(r);
IEnumerable allRecords = allOrders.Cast<Record>();
但坦率地说,您的 o
结构很糟糕,您应该将项目列表构建为 IEnumerable
或 IList
或其他东西,而不是 #Parameters * #Rows
。
关于c# - LINQ 规范化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2805157/