我有一组数据
id int
Name string
所以我想将这些数据存储在列表中。 我正在写查询
List<int> storedata = tabledata.Select(p => new {p.id, p.Name});
但我收到了错误。那么这样做的正确方法是什么。
答案 0 :(得分:4)
如果您想要匿名类型的列表 ,建议您使用var
和.ToList()
:
var store = tabledata
.Select(p => new {id = p.id, name = p.Name}) // Anonymous type
.ToList(); // list of anonymous type's items
让.Net推断(var
)类型。但是,考虑到您的数据(id
和name
),您可能希望将数据存储为词典,而非列表:< / p>
Dictionary<int, string> data = tabledata
.ToDictionary(p => p.id, p => p.Name);
...
string name123 = data[123]; // let's have a value that corresponds to id = 123
if (data.ContainsKey(789)) {
// do we have id = 789?
}
if (data.TryGetValue(456, out var name456)) { // C# 7.0 Syntax
// If we have id = 456, return corresponding value into name456
}
答案 1 :(得分:0)
您收到错误,因为Select(p => new {p.id, p.Name})
的返回值不是List<int>
,但它是一个由anonymous
类型的IEnumerable,由编译器指定,当您不知道时写下代码。
答案 2 :(得分:0)
此行涉及几个编译器错误:
List<int> storedata = tabledata.Select(p => new {p.id, p.Name});
首先,Select()方法返回一个IEnumerable。尝试将Select操作的结果存储到List中是行不通的。
其次,Select操作返回的类型是个问题。选择的主体......
p => new {p.id, p.Name}
...返回匿名类型。您定义为List的storedata变量需要使用简单的整数填充。
不是我推荐它,但以下内容会编译,例如:
IEnumerable<object> storedata = tabledata.Select(p => new {p.id, p.Name});