在List中添加一些值
本文关键字:添加 List | 更新日期: 2023-09-27 18:09:09
我写了一些代码:
List<DataRow> rows=new <DataRow>();
foreach (DataRow dtRow in sqlRows)
{
foreach (DataRow dtRowId in dttRows1)
{
if (Convert.ToInt32(dtRowId[0]) == Convert.ToInt32(dtRow[1]))
rows.Add(dtParRow);
}
}
我可以用更有效的方式写吗?可以使用LINQ吗?或者其他的算法?
注:sqlRows和dttRows1是List。我用这样的查询从表中获取它:"Select * from table name";
您可以直接使用LINQ连接,这将比嵌套方法更有效:
var query = from dtRow in sqlRows
join dtRowId in dttRows1
on Convert.ToInt32(dtRow[1]) equals Convert.ToInt32(dtRowId[0])
select ???; // dtParRow is unknown. Did you mean dtRow?
var list = query.ToList();
请注意,如果这些值已经是int
值(所以不需要解析等),那么只需转换:
var query = from dtRow in sqlRows
join dtRowId in dttRows1
on (int) dtRow[1] equals (int) dtRowId[0]
select ???; // dtParRow is unknown. Did you mean dtRow?
var list = query.ToList();
或者使用Field<T>
扩展方法(同样,只有当它们已经是不需要转换的int
值时):
var query = from dtRow in sqlRows
join dtRowId in dttRows1
on dtRow.Field<int>(1) equals dtRowId.Field<int>(0)
select ???; // dtParRow is unknown. Did you mean dtRow?
var list = query.ToList();
你可以这样重写
List<DataRow> rows= (from dtRow in sqlRows
from dtRowId in dttRows1
where Convert.ToInt32(dtRowId[0]) == Convert.ToInt32(dtRow[1])
select dtParRow).ToList();
这并不总是更好的方法。你的代码更清晰了。
看起来您需要根据条件找到一些项目并将其添加到单独的列表中。
在LINQ中尝试"join"。请看下面的例子。
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}
var customerList1 = new List<Customer>(new[]
{
new Customer {Id = 1, Name = "AAA"},
new Customer {Id = 1, Name = "BBB"},
new Customer {Id = 1, Name = "CCC"}
});
var customerList2 = new List<Customer>(new[]
{
new Customer {Id = 1, Name = "AAA"},
new Customer {Id = 1, Name = "BBB"},
new Customer {Id = 1, Name = "CCC"},
new Customer {Id = 1, Name = "DDD"}
});
var commonCustomers = customerList1.Join(customerList2, x => x.Name, y=>y.Name,(a,b)=>a).ToList();
所以根据你的问题,我认为你应该写的是,(请注意,下面的代码还没有经过测试)
var rows = sqlRows。加入(dttRows1 x => Convert.ToInt32 (x [0]), y => Convert.ToInt32 (y [0]), (a, b) =>) .ToList ();
谢谢,Cheranga