0

私はオブジェクトリストを持っています:

List<dynamic> prods = new List<dynamic>();

            foreach (DataRow row in dataTable.Rows)
            {
                dynamic obj = new ExpandoObject();
                IDictionary<string, object> oprops = obj;

                foreach (System.Data.DataColumn col in dataTable.Columns)
                    oprops.Add(col.ColumnName, row[col.ColumnName]);
                obj = oprops;
                list.Add(obj);
            }

pricingリストは、製品の価格設定から同じように入力されますDataTable

私はこのクエリを持っています:

var result = (from product in prods join price in pricing on product.ID equals price.ProductID select new { product, price }).ToList();

そして、結果セットにさらにいくつかのプロパティを追加したいと思います。

    foreach (dynamic obj in q)
    {
        obj.Test = "yes, testing."; // This line gives runtime error
        Console.WriteLine(
            "{0} - {1}",
            obj.product.Name,
            obj.price.UnitPrice);
    }

foreach ループの個々の結果オブジェクトに追加するオブジェクト/値がいくつかあります。

次のように実行時エラーがスローされるため、それを行うことができません。

<>f__AnonymousType1<dynamic,dynamic>' does not contain a definition for 'Test' and no extension method 'Test' accepting a first argument of type '<>f__AnonymousType1<dynamic,dynamic>' could be found (are you missing a using directive or an assembly reference?)
4

2 に答える 2

0

foreach ループで設定できるように、データのクエリ中にプロパティを追加します。例えば:

var result = (from product in prods
                join price in pricing on product.ID equals price.ProductID
                select new { product, price, Test = (string)null, }
             ).ToList();

または、私が試したことのないもの、多分ExpandoObjectを使用します:

var result = (from product in prods
                join price in pricing on product.ID equals price.ProductID
                select new ExpandoObject { product, price }
             ).ToList();
于 2013-07-15T01:55:11.627 に答える
0

これが私が見つけたものです。linq クエリの結果セットを拡張することはできませんが、新しい exapndo オブジェクトを作成すると問題が解決し、新しいプロパティを追加できるようになります。

これは実際に私がやったことです:

List<dynamic> list = new List<dynamic>();
            foreach (var o in q)
            {
                dynamic obj = new ExpandoObject();
                IDictionary<string, object> oprops = obj;
                oprops.Add("Test", "yes, testing!");
                oprops.Add("product", o.product);
                oprops.Add("price", o.price);
                obj = oprops;
                list.Add(obj);
            }
于 2013-07-15T02:26:26.220 に答える