从列表中加入ID

时间:2013-08-02 21:17:28

标签: c#

目标

将List中所有元素的每个id加入到1, 2, 3等连接字符串中。

问题

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

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

如何获取这些ids并将它们连接成一个字符串?

我已经尝试了什么

我已经尝试过以下代码(based on this question):

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

Techincal详细信息

我的.Net版本是4.5。

重复的?

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

6 个答案:

答案 0 :(得分:11)

您可以使用:

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

这会使用generic version of string.Join以及Enumerable.Select将您的产品系列转换为IEnumerable<int>

答案 1 :(得分:2)

您看到的输出是在ToString对象上调用Products的结果,看起来它还没有被覆盖。

您需要覆盖ToString的{​​{1}}或选择Products属性:

id

答案 2 :(得分:1)

string.Join中使用select语句:

List<Products> sessionProducts = sessionStore.Get("ProductsSummary");
string list = string.Join(", ", sessionProducts.Select(p => p.Id));

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:1)

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

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

    public string override ToString()
    {
        return this.Id.ToString();
    }
}

答案 5 :(得分:1)

你得到了这个

MyApp.Models.Data.Products

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

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