0

I'm trying to use the select function filtered by a list as oposed to a value

if dt_old is a datatable, CFKEY is a column of dt_old, this statement uses Select for a specific Value and it work fine.

DataRow[] dt_oldDuplicateRow = dt_old.Select("CFKEY = '1'");

I can't find a way to use select to filter on an array or list based on an other datatable, I would like to do something like this.

DataColumn dc = dt_new.Columns["CFKEY"];
DataRow[] dt_oldDuplicateRow = dt_old.Select("CFKEY in " + dc );

where dt_new is the same format as st_old. any idea?

Mike
  • 1,158
  • 5
  • 22
  • 32
nono
  • 3
  • 2

3 Answers3

0

You must refrence to System.Data.DataSetExtensions and use AsEnumerable() for datatable

var results =  dt_old.AsEnumerable().Select()

check this question LINQ query on a DataTable

Community
  • 1
  • 1
M.Azad
  • 3,673
  • 8
  • 47
  • 77
0

I am not sure if the list of keys are your choice or a list obtained from dt_new. Anyway,

List<string> listOfDuplicateKeys = createTheKeyList();

DataRow[] dt_oldDuplicateRow = dt_old.Rows.Cast<DataRow>()
                .Where(dr => listOfDuplicateKeys.Contains(dr["CFKEY"].ToString()))
                .ToArray();
serdar
  • 1,564
  • 1
  • 20
  • 30
0

Thanks serdar, it's exactly what I needed.

My list was obtained from dt_new and I slightly changed your code.

var list = dt_new.Rows.OfType<DataRow>()
                                .Select(dr => dr.Field<string>("CFKEY"))
                                .ToList();

DataRow[] dt_oldDuplicateRow = dt_old.Rows.OfType<DataRow>()
                                .Where(dr => list.Contains(dr["CFKEY"].ToString()))
                                .ToArray();
nono
  • 3
  • 2