获取一列的值作为字符串,其他列值指定为字符串?

时间:2015-04-28 15:28:10

标签: c# sql linq select datatable

我可以使用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)

我知道这是一个基本问题,但请全面回答!

提前致谢!

2 个答案:

答案 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特定类型来存储日期和时间值,那会更好。