23

現在LINQでは、以下がコンパイルされ、正常に動作します。

var listOfFoo = myData.Select(x => new FooModel{
     someProperty = x.prop1,
     someOtherProperty = x.prop2
});

public class FooModel{
     public string someProperty  { get; set; };
     public string someOtherProperty  { get; set; };
}

ただし、過去数バージョンの.NET / C#は、などの動的オブジェクトの役割を拡張しており、ExpandoObject基本的にこれを行う方法があるかどうか疑問に思っています。

var listOfFoo = myData.Select(x => new ExpandoObject{
     someProperty = x.prop1,
     someOtherProperty = x.prop2
});

明らかに、私はすでに上記のコードを試しましたが成功しませんでしたが、何かが足りないようです。

4

3 に答える 3

44

タイプを宣言せずに、新しい匿名オブジェクトを作成できるはずです。

var listOfFoo = myData.Select(x => new {
    someProperty = x.prop1,
    someOtherProperty = x.prop2
});
于 2013-03-21T18:07:05.837 に答える
12

SelectExpandoObjectのコレクションを返すために使用することを妨げるものは何もありません。単に、を適切に構築していないだけExpandoObjectです。これが1つの方法です:

var listOfFoo = myData.Select(x =>
    {
        dynamic expando = new ExpandoObject();
        expando.someProperty = x.prop1;
        expando.someOtherProperty = x.prop2;
        return (ExpandoObject)expando;
    });
于 2013-03-21T18:16:21.253 に答える
0
using (var command = this._context.Database.GetDbConnection().CreateCommand())
        {
            command.CommandText = "select * from persons";
            command.CommandType = CommandType.Text;
            this._context.Database.OpenConnection();
            using (var result = command.ExecuteReader())
            {
                var lst = new List<object>();
                var lstColumns = new UserAccount().GetType().GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).ToList();
                while (result.Read())
                {
                    var newObject = new object();
                    dynamic myobject = new ExpandoObject();
                    IDictionary<string, object> myUnderlyingObject = myobject;
                    for (var i = 0; i < result.FieldCount; i++)
                    {
                        var name = result.GetName(i);
                        var val = result.IsDBNull(i) ? null : result[i];
                        myUnderlyingObject.Add(name, val);
                    }
                    lst.Add(myUnderlyingObject);
                }
                return Ok(lst);
            }
        }
于 2021-09-14T13:33:32.323 に答える