我想在数据库表中搜索Name的行数。假设我输入12岁,编译器可以搜索匹配Age of 12的Names,并计算Name的总行数,如何输入代码?我正在使用Linq DataRow []但我的代码不起作用。这是我的代码,可以帮我修复代码吗?
DataRow[] setSTD =
db1.Tables["table1"].
Select("Age =" + age).
Select(n => n["Name"]);
答案 0 :(得分:4)
var rows = db1.Tables["table1"]
.AsEnumerable()
.Where( o => o.Field<int>( "Age" ) == age );
这将返回一个可枚举的行集合(如果需要,您可以从中提取名称列),方法是添加.Select( o => o.Field<string>( "Name" ) );
如果您需要计算行数,可以将.Count()
添加到任何可枚举集合的末尾。
我建议在数据库级别执行此操作,以避免返回您不需要的行,查询将只是:
DECLARE @Age INT = 12;
SELECT * FROM table1 WHERE Age = @Age;
Select()
上的DataTable
方法早于LINQ。 LINQ通常要优越得多,但是对于引用Select()
可以传递一个字符串过滤器,例如“Age = 12”。 Select()
返回一个DataRows数组。
答案 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");