将数据表与IList进行比较

时间:2014-07-15 14:21:43

标签: c# wpf linq datatable ilist

我有DataTable,名为dt,有两列,通过从CSV文件中读取数据来填充。 2列为Keys,各自Descriptions约为7000行。

现在我有IList<string>个密钥,这只是密钥(与DataTable中的密钥相同)。

如何将IList<string>键与DataTable匹配,并将最终输出检索为new DataTable,其中只有与IList匹配的行?

2 个答案:

答案 0 :(得分:1)

您可以使用:

DataTable filtered = dt.AsEnumerable()
                        .Where(r => list.Contains(r.Field<int>("id")))
                        .CopyToDataTable();

您还可以创建HashSet<T>并在查询中使用它。

List<int> list = new List<int>();
//.... ids in the list

HashSet<int> hashSet = new HashSet<int>(list);
DataTable filtered = dt.AsEnumerable()
                        .Where(r => hashSet.Contains(r.Field<int>("id")))
                        .CopyToDataTable();

答案 1 :(得分:0)

如果是实体框架:

  

类DbItem           {               public int Key {get;组; }               public int Value {get;组; }           }

var keysInMemory = new List<int>(); // put your Keys here
var values = new StringBuilder();
values.AppendFormat("{0}", keysInMemory[0]);
for (var i = 1; i < keysInMemory.Count; i++)
            values.AppendFormat(", {0}", keysInMemory[i]);

var sql = string.Format(@"SELECT dt.Key Key, dt.Value Value FROM [dbo].[dt] where Key  IN ({0})", values.ToString());

var result = await _dbContext.Database.SqlQuery<DbItem>(sql).ToListAsync();

请注意&#34;包含&#34; IQueryable的表现非常糟糕