问题描述
|
我试图找出一种干净的方法,可以从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; }
}
我所有的搜索都出现了包含前两个代码示例的示例。
解决方法
我不建议您使用您正在使用的“无类型”方法。
我将使用类型化的对象,而不是您不想创建的对象。
但是,这是您问题的答案。您可以根据需要使用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;