2

目标

将 List 中所有元素的每个 id 连接到一个连接的字符串中,例如1, 2, 3.

问题

在我的应用程序中有一个方法,它的唯一参数是string类型,我想传递一个类似的值1, 2, 3, 4, 5

这些值 ( 1, 2, 3, 4, 5) 将由 a 发送给我List<Product>——我需要id从此列表中获取每个元素的 。

我怎样才能得到这些ids并将它们连接成一个字符串?

我已经尝试过的

我已经尝试过以下代码(基于这个问题):

List<Products> sessionProducts = sessionStore.Get("ProductsSummary");
// ProductsSummary is the index of my Session.

string list = string.Join(", ", sessionProducts);

return Content(list);

但没有成功。当我访问我的视图时,返回是:

MyApp.Models.Data.Products

技术细节

我的 .Net 版本是 4.5。

重复?

我认为这不是因为我在 Google 和 SO 上搜索过,而是没有成功。此外,我的发现对我没有帮助。

4

6 回答 6

13

您可以使用:

string list = string.Join(", ", sessionProducts.Select(p => p.id));

这使用string.Join 的通用版本,以及Enumerable.Select从您的 Product 集合转换为IEnumerable<int>.

于 2013-08-02T21:19:06.883 回答
2

您看到的输出是调用ToStringProducts对象的结果,并且它似乎没有被覆盖。

您需要覆盖ToStringofProducts或选择id属性:

string list = string.Join(", ", sessionProducts.Select(product => product.id));
于 2013-08-02T21:19:39.223 回答
1

在您的 : 中使用 select 语句string.Join

List<Products> sessionProducts = sessionStore.Get("ProductsSummary");
string list = string.Join(", ", sessionProducts.Select(p => p.Id));
于 2013-08-02T21:19:12.917 回答
1

您需要将 Id 列表传递给string.Join,如下所示:

string joinedIds = string.Join(", ", sessionProducts.Select(p => p.Id))

否则,ToString()被调用,这就是你看到那个特定字符串的原因。

于 2013-08-02T21:20:20.653 回答
1

因为其他人在.Select()这里给了你答案是另一种选择。覆盖 ToString 函数,Products因此当 join 尝试加入它们时,它将使用 id 而不是类名

public class Products
{
    public int Id {get; set;}

    public string override ToString()
    {
        return this.Id.ToString();
    }
}
于 2013-08-02T21:21:27.790 回答
1

你得到这个

MyApp.Models.Data.Products

因为您正在传递它List<Products>并且 string.Join 正在调用.ToString()您的对象。而你需要像这样传递 id

string list = string.Join(", ", sessionProducts.Select(x=>x.id));
于 2013-08-02T21:22:56.603 回答