2014-06-18 20 views
0

添加一些值我寫一些代碼,這樣做:C#在列表

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?或者其他一些算法?

P.S. sqlRows和dttRows1是List。我用表格查詢這樣的查詢:「Select * from table name」;

+3

哪裏 「dtParRow」 從何而來? – Sajeetharan

+0

什麼是'sqlRows'和dttRows1'完全一致? –

+0

一個簡單的LINQ查詢應該確實可以完成這項工作。 – Tarik

回答

0

可以重寫,像

List<DataRow> rows= (from dtRow in sqlRows 
        from dtRowId in dttRows1 
        where Convert.ToInt32(dtRowId[0]) == Convert.ToInt32(dtRow[1])   
        select dtParRow).ToList(); 

這並不總是更好的辦法。 Yor代碼更加清晰。

+0

好吧,你決定把整件事放在一條線上並沒有什麼幫助 - 使用多條線可以清楚得多。 –

1

你可以只使用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> extension method(同樣,只有當他們已經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(); 
+0

它會是dtRow.Field (索引),比鑄造或轉換更好? – Typist

+0

@Typist:是的前者 - 但我不認爲它會做(說)字符串轉換。現在檢查和編輯... –

+0

字符串轉換?我錯過了什麼 – Typist

0

看起來您需要根據條件找到一些項目並將其添加到單獨的列表中。

在LINQ中嘗試「加入」。請看下面的例子。

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行= sqlRows.Join(dttRows1,X =>轉換.ToInt32(x [0]),y => Convert.ToInt32(y [0]),(a,b)=> a).ToList();

感謝, Cheranga