将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
我的.Net版本是4.5。
我认为这不是因为我在Google和SO上搜索过,但没有成功。而且,我发现的并没有帮助我。
答案 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));