如何将匿名类型转换为键值对对象

本文关键字:键值对 对象 类型转换 | 更新日期: 2023-09-27 17:57:22

我正在尝试找出一种从我的Web服务中获取数据的干净方法,即键/值对。

有没有办法接受这样的查询:

            var q = db.Ratings.Select(x => new
                                     {
                                         x.pro,
                                         x.con,
                                         x.otherThoughts,
                                         x.Item.title,
                                         x.score,
                                         x.subject
                                     });

并且只返回一个键值对,其中键将是上面列出的列,以及它们对应的值?

而不是创建一个单独的类?

myDict.Add("pro", q.pro);
myDict.Add("con", q.con);

这效率不高,创建这样的类也不是,特别是如果我有几十种方法:

public class Rating
{
  public string pro { get; set; }
  public string con { get; set; }
} 

我所有的搜索都会找到包含前两个代码示例的示例。

如何将匿名类型转换为键值对对象

我不建议使用您正在查看的"非类型化"方法。
我会改用类型化对象,即您不想创建的对象。

但是,这是您问题的答案。您可以将数据表对象用于所需的内容。喜欢这个:

var items = new[]
{
    new Item { Id = 1, Name = "test1" }, 
    new Item { Id = 2, Name = "test2" }
};
var dataTable = new DataTable();
var propeties = typeof(Item).GetProperties();
Array.ForEach(propeties, arg => dataTable.Columns.Add(arg.Name, arg.PropertyType));
Array.ForEach(items, item => dataTable.Rows.Add(propeties.Select(arg => arg.GetValue(item, null)).ToArray()));
return dataTable;