0

我有一个DataTable名为dt. 它有两个名为atype_code和的列module。现在我需要根据特定查询一个模块atype_code

这是我编写但无法正常工作的代码。

DataTable dt = GetATypeCodeList();
var accType = (from myAccType in dt.AsEnumerable()
           where myAccType.Field<string>("atype_code") == aTypeCode.Trim()
           select myAccType.Field<string>("module"));

acctype是一个System.Data.EnumerableRowCollection<System.String>

4

1 回答 1

1

既然你说你

需要根据具体的atype_code查询一个模块

,我假设你只想要一个module给定的atype_code.

那么你应该使用Single/SingleOrDefaultFirst/ FirstOrDefault

String firstModule = dt.AsEnumerable()
                       .Where(r => r.Field<string>("atype_code") == aTypeCode.Trim())
                       .Select(r => r.Field<string>("module"))
                       .FirstOrDefault();
// or
String singleModule = dt.AsEnumerable()
                       .Where(r => r.Field<string>("atype_code") == aTypeCode.Trim())
                       .Select(r => r.Field<string>("module"))
                       .SingleOrDefault();

Enumerable.Single如果有多个匹配元素,则抛出异常。这对于验证数据很有用。

编辑

这是查询语法:

IEnumerable<String> modules =  
    from myAccType in dt.AsEnumerable()
    where myAccType.Field<string>("atype_code") == aTypeCode.Trim()
    select myAccType.Field<string>("module");
String module = modules.FirstOrDefault(); // returns null if no matching modules were found
于 2012-06-27T10:23:47.463 回答