I write some code which do:
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);
}
}
Can I write it some more effective way? May be use LINQ? Or some other algorihtm?
P.S. sqlRows and dttRows1 is List. I grub it from table with query like this:"Select * from table name";
You could just use LINQ with a join, which would be more efficient than the nested approach:
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();
Note that if those values are already int
values (so don't need parsing etc) then just cast instead:
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();
Or use the Field<T>
extension method (again, only if they're already int
values which don't need converting):
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();
See more on this question at Stackoverflow