我有DataTable
,名为dt
,有两列,通过从CSV文件中读取数据来填充。 2列为Keys
,各自Descriptions
约为7000行。
现在我有IList<string>
个密钥,这只是密钥(与DataTable
中的密钥相同)。
如何将IList<string>
键与DataTable
匹配,并将最终输出检索为new DataTable
,其中只有与IList
匹配的行?
答案 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的表现非常糟糕