3

LINQを使用してデータレコードをオブジェクトにロードすると、次のエラーが発生します。dataLevelId2つのフィールドとを追加する前は機能していましdataLevelた。今は機能していないので、すべきではないことをしなければなりません。誰かが私が間違っていることを見つけることができますか?

{System.ArgumentException: An item with the same key has already been added.
   at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)...

これは私のコードです:

var groups = reader.Cast<IDataRecord>()
    .GroupBy(dr => new { ID = (int)dr["productId"] })
    .GroupBy(g => g.Key.ID);

products = (
    from productGroup in groups
    let productRow = productGroup.First().First()
    select new Product()
    {
        ID = Convert.ToString((int)productRow["productId"]),
        Name = !DBNull.Value.Equals(productRow["name"]) ? (string)productRow["name"] : "",
        OutputFormats =
        (
            from formatRow in productGroup.First()
            select new OutputFormat()
            {
                ID = !DBNull.Value.Equals(formatRow["outputFormatId"]) ? Convert.ToString(formatRow["outputFormatId"]) : "",
                Name = !DBNull.Value.Equals(formatRow["outputFormat"]) ? (string)formatRow["outputFormat"] : "",
                DataLevelID = !DBNull.Value.Equals(formatRow["dataLevelId"]) ? Convert.ToString(formatRow["dataLevelId"]) : "",
                DataLevel = !DBNull.Value.Equals(formatRow["dataLevel"]) ? (string)formatRow["dataLevel"] : ""
            }
        ).ToSerializableDictionary(p => p.ID)
    }
).ToSerializableDictionary(p => p.ID);

そして、これが私のデータレコードで返されるデータです。 ここに画像の説明を入力してください

はい、OutputFormatクラスとProductクラスには文字列プロパティ(Idを含む)のみがあります。

アップデート:

私が欲しいのは私のを埋めることSerializableDictionary<string, Product> productsです。3つの製品が必要であり、各製品には対応する出力形式が必要です。

public class Product
{
    public string ID { get; set; }
    public string Name { get; set; }
    public SerializableDictionary<string, OutputFormat> OutputFormats { get; set; }
}

public class OutputFormat
{
    public string ID { get; set; }
    public string Name { get; set; }
    public string DataLevelID { get; set; }
    public string DataLevel { get; set; }
}
4

1 に答える 1

5

辞書を使用していて、同じキーでアイテムを追加しようとしています。

以下のようになります。

Dictionary.add("key1","item1")
Dictionary.add("key2","item2")
Dictionary.add("key1","item3") << not allowed.

コードを確認し、それを避けてください。

于 2013-01-14T16:20:55.257 に答える