2011-11-11 105 views
0

我试图根据条件从数据表中选择列的值。Datatable linq select查询

var results = from DataRow myRow in dtCallBack.AsEnumerable() 
       where myRow.Field<DateTime>(1) == startDateTime 
       && myRow.Field<int>(0) == callBackID 
       select myRow.Field<int>(3); 

我的DataTable包含4列编号,日期1,日期2,INTVAL

我要转换的变量结果为int。 (我想返回列4 IntVal)

回答

1
var results = (from DataRow myRow in dtCallBack.AsEnumerable 
       where myRow.Field<DateTime>(1) == startDateTime 
       && myRow.Field<int>(0) == callBackID 
       select myRow.Field<int>(3)).SingleOrDefault(); 
+0

'AsEnumerable' - >'AsEnumerable()' – sll

+0

我的错误AsEnumerable()在代码 – Premanshu

+0

中有效它非常感谢Thanh – Premanshu

1

那么你现在有一个IEnumerable<int>的外观。那么你想要哪些结果呢?如果不是有什么结果?

如果你确信那里只有一个结果,你可以使用:

var result = results.Single(); 

如果你想第一个结果还是0,如果没有任何,你可以使用

var result = results.FirstOrDefault(); 

如果你想第一个结果和异常,如果没有任何,你可以使用

var result = results.First(); 

基本上有很多的选择,你需要澄清你的要求,才能真正给你一个更具体的答案。

+0

firstOrDefault将服务我的purposeFirstOrDefault会做。如果没有结果返回0. startDateTime和callBackID是要检查的参数。 – Premanshu

+0

非常感谢乔恩。 SingleOrDefault的加入使其工作... – Premanshu

+0

@Premanshu:与接受的答案不同,因为你只有一个结果,所以I *不会在最后调用变量'results'。我个人可能会将它分离到查询中,然后单纯的“SingleOrDefault”代码 - 我通常不喜欢在查询表达式的末尾放置方法调用。 –