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

时间:2011-05-24 02:34:16

标签: c#

我正试图找出一种从我的网络服务中获取数据的简洁方法,即关键/价值对。

有没有办法像这样进行查询:

            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; }
} 

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

1 个答案:

答案 0 :(得分:1)

我不建议您使用您正在查看的“无类型”方法 我会使用类型化对象,而不是你想要创建的对象。

但是,这是您问题的答案。您可以根据需要使用DataTable对象。像这样:

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;