Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ标准化数据_C#_Sql_Linq_Union_Normalize - Fatal编程技术网

C# LINQ标准化数据

C# LINQ标准化数据,c#,sql,linq,union,normalize,C#,Sql,Linq,Union,Normalize,我使用的OMS在数据库中每个记录最多存储三行项目 以下是包含五个行项目的订单示例 Order Header Order Detail Prod 1 Prod 2 Prod 3 Order Detail Prod 4 Prod 5 一条订单标题记录和两条详细记录 我的目标是为详细记录建立一对一的关系(即,每行项目一个详细记录)。过去,我使用unionallSQL语句来提取数据。使用LINQ有更好的方法解决这个问题吗 下面是我第一次尝试使用LINQ。如有任何反馈、建议

我使用的OMS在数据库中每个记录最多存储三行项目

以下是包含五个行项目的订单示例

Order Header
Order Detail
   Prod 1
   Prod 2
   Prod 3
Order Detail
   Prod 4
   Prod 5
一条订单标题记录和两条详细记录

我的目标是为详细记录建立一对一的关系(即,每行项目一个详细记录)。过去,我使用
unionall
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 });

我构建了一个简单的子类

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>();
var orders=context.orderssubheads.Select(o=>
新记录[]{
新记录{SubHeading=o,EdpNo=o.EDPNOS_001,Price=o.EXTPRICES_001,Quantity=o.ITEMQTYS_001},
新记录{SubHeading=o,EdpNo=o.EDPNOS_002,Price=o.EXTPRICES_002,Quantity=o.ITEMQTYS_002},
新记录{SubHeading=o,EdpNo=o.EDPNOS_003,Price=o.EXTPRICES_003,Quantity=o.ITEMQTYS_003}
}
);
IEnumerable allOrders=IEnumerable.Empty;
foreach(订单中记录[]r)
allOrders=allOrders.Concat(r);
IEnumerable allRecords=allOrders.Cast();

但是坦率地说,你的
o
结构糟糕透了,你应该把项目列表构建成
IEnumerable
IList
之类的东西,而不是
#参数*#行

是不是
E?如果少于三个怎么办<代码>空值
值?是的,表列用_00n固定。架构是从支持数据类型为数组的HPe3000图像数据库迁移而来的。项目级详细信息存储在数组中。如果仅存在一个行项目,则其他两个值的项目ID将为零。这同样适用于价格和数量。不可能出现空值。列的默认值为零或空格。所有这一切背后的理由是为了节省当时的空间。设计师在订单上获取最常见的行项目数,并创建订单详细信息模式。谢谢,你指的是数据库模式吗?