使用c#访问数据集值

本文关键字:数据集 访问 使用 | 更新日期: 2023-09-27 18:15:16

我有一个应用程序,调用一个web服务,其中GetDataSourceMappingTable是一个数据结构,它是一个data set

我想做的是提取某个列(Users_Tests)的值,这将给我一个强制性参数,以便能够调用另一个web服务GetUser()

数据集结构:

GetDataTableResponse xmlns="http://tempuri.org/">
         <GetDataTableResult>
            <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
               <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
                  <xs:complexType>
                     <xs:choice minOccurs="0" maxOccurs="unbounded">
                        <xs:element name="Table">
                           <xs:complexType>
                              <xs:sequence>
                                 <xs:element name="SourceID" type="xs:string" minOccurs="0"/>
                                 <xs:element name="Caption" type="xs:string" minOccurs="0"/>
                              </xs:sequence>
                           </xs:complexType>
                        </xs:element>
                     </xs:choice>
                  </xs:complexType>
               </xs:element>
            </xs:schema>

我需要调用元素名称"Caption"并传递值Users_Test(其中Users_Test是该表中的值)以获得SourceID e.g. "Data1"

下面是我的代码:
var ds = proxy.GetDataTable();
var DataSourceId = ds.Tables["Table"].Select("Caption = 'Users_test'");
UserData[] userDataId = client.GetUser(ref apiKey, ref message, DataSourceId.ToString()); //GetUserData need the sourceID e.g. Data1 to be able to be used

每当我在GetUser()方法内的DataSourceId变量中运行程序时,都没有正确传递。我得到一个数组0和1。在0中,我得到Data1,在1中,我得到Users_tests。

我应该得到。"Data1"

我如何只能得到标题的值,但给SourceID GetUser()方法?

我也希望能够有多个标题,如我们(Select("Caption = 'Users_test'");Select("Caption = 'Users_test1'");Select("Caption = 'Users_test3'");

这可能吗?

谢谢

使用c#访问数据集值

DataTable.Select()返回DataRow[]数组,因此您可以使用Linq Select方法将行投影到Caption的条目。以下表达式获取与标题对应的SourceID值,如果未找到则返回null,并在多个匹配时抛出异常:

    var DataSourceId = ds.Tables["Table"]
        .Select("Caption = 'Users_test'") // Find rows with Caption = 'Users_test'
        .Select(r => r["SourceID"])       // Project to the value of SourceId
        .Where(s => s != DBNull.Value)    // Filter DBNull (might occur when the SourceID cell is missing
        .Select(s => s.ToString())        // Project to string value
        .SingleOrDefault();               // null if no matches, throw an exception if more than one match.

如果您合理地期望Caption = 'Users_test'有不止一行,那么您可以使用foreach语句循环遍历它们:

    var query = ds.Tables["Table"]
        .Select("Caption = 'Users_test'") // Find rows with Caption = 'Users_test'
        .Select(r => r["SourceID"])       // Project to the value of SourceId
        .Where(s => s != DBNull.Value)    // Filter DBNull (might occur when the SourceID cell is missing
        .Select(s => s.ToString());        // Project to string value
    foreach (var DataSourceId in query)
    {
    }

原型小提琴。

使用DataTable.Select()选择多个标题,使用OR运算符:

            var query = ds.Tables["Table"]
                .Select("Caption = 'Users_test' OR Caption = 'Users_test3'") // Find rows any of several captions
                .Select(r => r["SourceID"])       // Project to the value of SourceId
                .Where(s => s != DBNull.Value)    // Filter DBNull (might occur when the SourceID cell is missing
                .Select(s => s.ToString());       // Project to string value