Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.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将两个表中的SQL数据输出到XML中_C#_Sql Server_Xml_Linq - Fatal编程技术网

C# 使用LINQ将两个表中的SQL数据输出到XML中

C# 使用LINQ将两个表中的SQL数据输出到XML中,c#,sql-server,xml,linq,C#,Sql Server,Xml,Linq,我对这个很陌生。希望有人能帮我建议如何改进代码 我有两个表,需要在其中获取SQL数据并将其输出为XML格式。我正在使用LINQ方法。下面是代码的外观 #region Database XML Methods private static void CreateDatabaseXml(string path) { tbchrDataContext db = new tbchrDataContext(); XDocument doc = new XDocument(

我对这个很陌生。希望有人能帮我建议如何改进代码

我有两个表,需要在其中获取SQL数据并将其输出为XML格式。我正在使用LINQ方法。下面是代码的外观

#region Database XML Methods

private static void CreateDatabaseXml(string path)
{
    tbchrDataContext db = new tbchrDataContext();
    XDocument doc = new XDocument(
        // XML Declaration
        new XDeclaration("1.0", "utf-8", "yes"),
        // XML Root element to 3rd in nest
        new XElement(ns + "WMS",
        new XElement(ns + "Order",
        new XElement(ns + "Header", from a in db.T_ORDER_DETAILs
                                    select new XElement(ns + "RARefNum", a.RARefNum), 
                                    new XElement (ns + "WMSCategory", from b in db.T_ORDER_HEADERs select b.Customer),
                                    new XElement (ns + "CustomerID", from a in db.T_ORDER_DETAILs select a.SupplierName)))) );

    #endregion
    doc.Save(path);
}
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<WMS xmlns="http://blog.cripperz.sg">
  <Order>
    <Header>
      <RARefNum>RASO000001</RARefNum>
      <RARefNum>RASO000001</RARefNum>
      <WMSCategory>ESSVMI</WMSCategory>
      <CustomerID>nVidianVidia</CustomerID>
    </Header>
  </Order>
</WMS>
下面是XML的输出

#region Database XML Methods

private static void CreateDatabaseXml(string path)
{
    tbchrDataContext db = new tbchrDataContext();
    XDocument doc = new XDocument(
        // XML Declaration
        new XDeclaration("1.0", "utf-8", "yes"),
        // XML Root element to 3rd in nest
        new XElement(ns + "WMS",
        new XElement(ns + "Order",
        new XElement(ns + "Header", from a in db.T_ORDER_DETAILs
                                    select new XElement(ns + "RARefNum", a.RARefNum), 
                                    new XElement (ns + "WMSCategory", from b in db.T_ORDER_HEADERs select b.Customer),
                                    new XElement (ns + "CustomerID", from a in db.T_ORDER_DETAILs select a.SupplierName)))) );

    #endregion
    doc.Save(path);
}
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<WMS xmlns="http://blog.cripperz.sg">
  <Order>
    <Header>
      <RARefNum>RASO000001</RARefNum>
      <RARefNum>RASO000001</RARefNum>
      <WMSCategory>ESSVMI</WMSCategory>
      <CustomerID>nVidianVidia</CustomerID>
    </Header>
  </Order>
</WMS>

RASO000001
RASO000001
ESSVMI
英维迪亚
最终,我想要实现下面的XML,从SQL获取的一些数据来自一个XML嵌套/元素中的两个单独的表

<?xml version="1.0" encoding="utf-8"?>
<WMS>
    <Order>
        <Header>
            <RARefNum>RASO000001</RARefNum>
            <WMSCategory>ESSVMI</WMSCategory>
            <CustomerID>nVidia</CustomerID>
            <CreationDate>2013-12-02 06:29:50</CreationDate>
            <OrderDate>2013-12-02 06:29:50</OrderDate>
            <ExpectedShippedDate>2013-12-02 06:29:50</ExpectedShippedDate>
            <LastShippedDate>2013-12-02 06:29:50</LastShippedDate>
            <CustomerOrderReference>nVidia9338</CustomerOrderReference>
            <CustomerShipmentNo>81475721</CustomerShipmentNo>
            <CustomerSONo>SO982733</CustomerSONo>
            <CustomerInvoiceNo>INV987373</CustomerInvoiceNo>
            <CustomerReference1>nVidia 1</CustomerReference1>
            <CustomerReference2/>
            <WMSReference1>Emp 1</WMSReference1>
            <WMSReference2>Emp 2</WMSReference2>
            <ShipmentNo>IWU997872</ShipmentNo>
            <DocumentNo>KK98764394</DocumentNo>
            <Transportation>
                <Mode>Freight</Mode>
                <VehicleType/>
            </Transportation>
            <Carrier>
                <ID>Fedex</ID>
                <Name>Fedex SG</Name>
                <Address>Changi Singapore</Address>
                <Country/>
                <PostalCode/>
                <Contact>
                    <Sequence/>
                    <Person/>
                    <Email/>
                    <DID/>
                    <Handphone/>
                </Contact>
            </Carrier>
            <Consignee>
                <ID>ABC</ID>
                <Name>ABC Corp</Name>
                <Address>Jurong West, Singapore</Address>
                <Country/>
                <PostalCode/>
                <Contact>
                    <Sequence/>
                    <Person/>
                    <Email/>
                    <DID/>
                    <Handphone/>
                </Contact>
            </Consignee>
            <Containers/>
        </Header>
        <Details>
            <Detail>
                <LineNo>1</LineNo>
                <SKU>SKU0001</SKU>
                <SKUDescription>SKU 0001</SKUDescription>
                <Package>50</Package>
                <OrderedQty>600.000</OrderedQty>
                <PickedQty>600.000</PickedQty>
                <PickedDate>2013-12-02 06:35:09</PickedDate>
                <ShippedQty>600.000</ShippedQty>
                <ShippedDate>2013-12-02 06:35:09</ShippedDate>
                <ManufactoryDate>2013-12-02 06:35:09</ManufactoryDate>
                <ExpiryDate>2014-12-02 06:35:09</ExpiryDate>
                <FIFODate>2013-06-02 06:35:09</FIFODate>
                <CustomerLotRef1>nVidia 2093</CustomerLotRef1>
                <CustomerLotRef2>nVidia 2099</CustomerLotRef2>
                <LineReference1>10</LineReference1>
            </Detail>
            <Detail>
                <LineNo>2</LineNo>
                <SKU>SKU0002</SKU>
                <SKUDescription>SKU 0002</SKUDescription>
                <Package>50</Package>
                <OrderedQty>100.000</OrderedQty>
                <PickedQty>100.000</PickedQty>
                <PickedDate>2013-12-02 06:35:09</PickedDate>
                <ShippedQty>100.000</ShippedQty>
                <ShippedDate>2013-12-02 06:35:09</ShippedDate>
                <ManufactoryDate>2013-12-02 06:35:09</ManufactoryDate>
                <ExpiryDate>2014-12-02 06:35:09</ExpiryDate>
                <FIFODate>2013-06-02 06:35:09</FIFODate>
                <CustomerLotRef1>nVidia 2193</CustomerLotRef1>
                <CustomerLotRef2>nVidia 2199</CustomerLotRef2>
                <LineReference1>10</LineReference1>
            </Detail>
        </Details>
    </Order>
</WMS>

RASO000001
ESSVMI
英伟达
2013-12-02 06:29:50
2013-12-02 06:29:50
2013-12-02 06:29:50
2013-12-02 06:29:50
nVidia9338
81475721
SO982733
INV987373
英伟达1
环境管理计划1
环境管理计划2
IWU997872
KK98764394
运费
联邦快递
联邦快递股份有限公司
新加坡樟宜
基础知识
ABC公司
新加坡裕廊西
1.
SKU0001
SKU 0001
50
600
600
2013-12-02 06:35:09
600
2013-12-02 06:35:09
2013-12-02 06:35:09
2014-12-02 06:35:09
2013-06-02 06:35:09
英伟达2093
英伟达2099
10
2.
SKU0002
SKU 0002
50
100
100
2013-12-02 06:35:09
100
2013-12-02 06:35:09
2013-12-02 06:35:09
2014-12-02 06:35:09
2013-06-02 06:35:09
英伟达2193
英伟达2199
10

有更好的编码方法吗?

我不知道这是否更好,但我可能会生成一些变量,而不是在xml中调用linq。然后就可以调用xml文档中的变量了

可能是这样的:

 private static void CreateDatabaseXml(string path)
{
    tbchrDataContext db = new tbchrDataContext();

    var rARefNum = db.T_ORDER_DETAILs.Select(i => i.RARefNum).Single();
    var customer = db.T_ORDER_HEADERs.Select(i => i.Customer).Single();
    var supplierName = db.T_ORDER_DETAILs.Select(i => i.SupplierName).Single();

    XDocument doc = new XDocument(
        // XML Declaration
        new XDeclaration("1.0", "utf-8", "yes"),
        // XML Root element to 3rd in nest
        new XElement(ns + "WMS",
        new XElement(ns + "Order",
        new XElement(ns + "Header", new XElement(ns + "RARefNum", rARefNum), 
                                    new XElement (ns + "WMSCategory", customer),
                                    new XElement (ns + "CustomerID", supplierName)))) );

    #endregion
    doc.Save(path);
}
  • 在sql server中,支持大量xml格式输出
  • 此查询从两个表返回一个xml文档。也许你正在使用 linq,然后在完成sql查询后,从 林克

    从table2.table1上的table1内部联接table2中选择table1.column1、table2.column2。table1_id=table1.id用于xml自动


检查。

@KiroYakuza No,Programmers.SE是关于软件开发概念的,例如算法、设计模式或有关软件开发生命周期的问题。请不要在不了解的情况下推荐其他网站。@KiroYakuza:你从哪里听说的?!好吧,那么@amon,我问这个问题是在正确的地方吗?@CPython说实话,我不太确定。你想解决的问题到底是什么?如果您询问如何修改代码以获得第二个输出,那么如果没有更多详细信息,我们无法回答这个问题。如果您的代码已经按预期工作,但您希望改进代码样式等,那么您可能需要查看代码。有一个专门的网站,但我也不确定这个问题是否适合这个网站。我会叫他们三次,也许有人会帮助我们:!起来@一次就够了。如果代码有效,它会在第一眼看到的时候查看代码审查主题。