我有一个字符串列表(或者可以是数组),我想从中动态创建一个匿名对象。我该怎么做呢?
var dataSet = new DataSet();
dataSet.ReadXml(@"");
var dataTable = dataSet.Tables[0];
var dataRow = dataTable.Rows[0];
var keys = new List<string> {"Column1","Column2"};
var result = new {keys[0] = dataRow[keys[0]], keys[1] = dataRow[keys[1]]}
因此,将在此方法之外创建名为“keys”的列表,并且可以包含 1 到多个值。我尝试创建一个字典并遍历列表并将键/值对添加到字典中,但后来我不知道如何将字典转换回匿名类型。我还尝试了 expando 对象,但这似乎并没有让我走得更远。
我必须能够返回匿名类型,因为此方法的结果将与 LINQ 查询的 GroupBy 子句一起使用。
这是我必须动态创建字典的方法:
public object Key(DataRow dataRow, List<String> keys)
{
var dictionary = new IDictionary<string, object>;
foreach (string key in keys)
{
dictionary.Add(key, dataRow[key]);
}
return dictionary;
}
这是我的 LINQ 查询:
var duplicates = dataTable.AsEnumerable().GroupBy(r => Key(r, keys)).Where(c => c.Count() > 1).ToList();
如果我从 Key() 方法硬编码匿名类型,则 GroupBy 子句有效。基本上我只需要根据键列表中的值动态设置 GroupBy 子句。