如何在列表c#

时间:2017-08-25 14:03:48

标签: c# linq lambda

我有一组数据

id     int
Name   string

所以我想将这些数据存储在列表中。 我正在写查询

List<int> storedata = tabledata.Select(p => new {p.id, p.Name});

但我收到了错误。那么这样做的正确方法是什么。

3 个答案:

答案 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)类型。但是,考虑到您的数据(idname),您可能希望将数据存储为词典,而非列表:< / 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});