输入Age值并计算与输入的Age相匹配的Name行数

时间:2012-03-29 07:50:02

标签: c# .net

我想在数据库表中搜索Name的行数。假设我输入12岁,编译器可以搜索匹配Age of 12的Names,并计算Name的总行数,如何输入代码?我正在使用Linq DataRow []但我的代码不起作用。这是我的代码,可以帮我修复代码吗?

DataRow[] setSTD = 
    db1.Tables["table1"].
        Select("Age =" + age).
        Select(n => n["Name"]);

4 个答案:

答案 0 :(得分:4)

LINQ

var rows = db1.Tables["table1"]
             .AsEnumerable()
             .Where( o => o.Field<int>( "Age" ) == age );

这将返回一个可枚举的行集合(如果需要,您可以从中提取名称列),方法是添加.Select( o => o.Field<string>( "Name" ) );

如果您需要计算行数,可以将.Count()添加到任何可枚举集合的末尾。

TSQL

我建议在数据库级别执行此操作,以避免返回您不需要的行,查询将只是:

DECLARE @Age INT = 12;
SELECT * FROM table1 WHERE Age = @Age;

非LINQ .NET

Select()上的DataTable方法早于LINQ。 LINQ通常要优越得多,但是对于引用Select()可以传递一个字符串过滤器,例如“Age = 12”。 Select()返回一个DataRows数组。

参考:http://msdn.microsoft.com/en-us/library/det4aw50.aspx

答案 1 :(得分:0)

DataRow[]setSTD = 
db1.Tables["table1"].Where(n => n["Age"] == age).Select(n => n["Name"]);

答案 2 :(得分:0)

以下内容可能有效,但我没有在真实环境中对此进行测试:

string[] names = (from r in db1.Tables["table1"] where r["Age"] == age select r["Name"]);

问题是:SELECT中有一个DataTable,而LINQ Select就是{{1}}。你需要确保不要混淆它们。

答案 3 :(得分:0)

也许是这样的:

var age=12;
var results = from myRow in db1.Tables["table1"].AsEnumerable()
where myRow.Field<int>("Age") == age
select myRow.Field<string>("Name");