我可以使用DataTable.Select(filterStatement);
在C#中执行此操作吗?
或者我应该使用Linq?
我有一个SQL查询返回一个DataTable dt2,它有两列,[Username]和[LastUpdated]。
我想从[LastUpdated]列中获取一个字符串,其中[Username]列等于一个字符串。
如果这很重要,两个数据类型都在SQL表中设置为varchar(50)。
我会发布一张图片,但我还不能,首先发布,数据表只是
用户名| LASTUPDATED
.... admin2 | 2015年4月27日...
在这种情况下,如果我可以获得第二列的值[Username] ='admin2'。
我在C#中尝试了以下内容:
string timestamp = "";
DataRow[] dt2result = dt2.Select("Username = 'admin2'");
timestamp = dt2result[1].ToString();
我得到了
System.IndexOutOfRangeException:索引超出了数组的范围
我试过只使用DataRow dt2result = dt2.Select("Username = 'admin2'");
而没有括号[],但我得到了
“无法将类型'Sytem.Data.DataRow []'隐式转换为'System.Data.DataRow'”
我尝试过不同的索引,例如dt2result[0]
和dt2result[1][0]
等,以及dt2result.GetValue(0)
我知道这是一个基本问题,但请全面回答!
提前致谢!
答案 0 :(得分:0)
DataRow dt2result = dt2.Select("Username = 'admin2'").First();
会得到正确的行(我假设)。然后使用以下内容获取正确的列:
var timestamp=dtresult[1].ToString();
以下内容也应该有效:
var timestamp=dt2.Select("Username = 'admin2'")[0][1].ToString();
答案 1 :(得分:0)
在这种情况下,如果我可以获得第二列的值,那么 [用户名] =' admin2'。
您有多种获取LastUpdated
列值的方法。
使用您当前的代码:
DataRow[] dt2result = dt2.Select("Username = 'admin2'");
您将获得一个DataRow
数组,您可以检查数组的长度并访问第一行,如:
DataRow firstRow = dt2result[0];
并选择您需要的第二列值:
var lastUpdatedValue = firstRow[1];
然后有 LINQ选项
var lastUpdatedValue = dt2.AsEnumerable()
.Where(r => r.Field<string>("Username") == "admin2")
.Select(r => r.Field<string>("LastUpdated"))
.FirstOrDefault();
我使用的是r.Field<string>("LastUpdated")
,因为varchar
列的数据类型为LastUpdated
。正如旁注,如果您使用DateTime
特定类型来存储日期和时间值,那会更好。