在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";

在List中添加一些值

您可以直接使用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