使用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'");
这可能吗?
谢谢
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