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オブジェクトを呼び出した結果であり、オーバーライドされていないようです。

をオーバーライドするか、プロパティToStringProducts選択する必要があります。id

string list = string.Join(", ", sessionProducts.Select(product => product.id));
于 2013-08-02T21:19:39.223 に答える
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 に答える
1

他の誰もがあなたに.Select()答えを与えたので、ここで別の選択肢があります。ProductsJoin がそれらを結合しようとするときに、クラス名の代わりに ID を使用するように、ToString 関数をオーバーライドします。

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

    public string override ToString()
    {
        return this.Id.ToString();
    }
}
于 2013-08-02T21:21:27.790 に答える
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

string.Join次のように、ID のリストを に渡す必要があります。

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

それ以外の場合ToString()は呼び出され、その特定の文字列が表示されるのはそのためです。

于 2013-08-02T21:20:20.653 に答える