2

データベース動的タイプから返されたプロパティの名前を返そうとしています:

var d = mDataAccess.Single<dynamic>("select col1 = 'asd', col2 = 'qwe'");
object o = d;
var props = o.GetType().GetProperties();
int propsCount = props.Count();

propsCount は 0 ですが、2 になると予想されます。その場合、以下のコードは col1 と col2 の 2 つの名前を返します。

List<string> names = o.GetType().GetProperties().Select(x => x.Name).ToList();

期待するプロパティが得られない理由はありますか?

4

3 に答える 3

2

辞書のリストに満足している場合は、次を使用できます。

var results = database.Fetch<dynamic>(sql).Cast<IDictionary<string, object>>().ToList();

これをに変換したい場合は、次のDictionary<string, List<string>>ようにフォローアップしてください。

result.First().Keys.ToDictionary(k => k, k => result.Select(r => r[k].ToString()).ToList());

結果カウントを確認した後。

于 2013-03-22T01:32:19.100 に答える
0

シングルリターンExpandoObject。

次を使用して、クエリから名前を取得できます。

(d as IDictionary<String, object>).Keys
List<string> names = (d as IDictionary<String, object>).Keys.ToList();
于 2012-12-07T10:42:43.230 に答える
0

誰も実用的な答えを提供できなかったので、これを修正できた解決策を投稿します。

var e = new Dictionary<string, List<string>>();

Sql sql = new Sql("select col1 = 'asd', col2 = 'qwe'");
var d = mDataAccess.Query<dynamic>(sql);

if (d != null && d.Count() > 0)
{
    List<string> cols = new List<string>();
    foreach (var t in d.First())
    {
        cols.Add(t.Key);
    }

    foreach (var key in cols)
    {
        List<string> values = new List<string>();
        foreach (var row in d)
        {
            foreach (var t in row)
            {
                if (t.Key == key) values.Add(t.Value.ToString());
            }
        }
        e.Add(key, values);
    }
}

return e;
于 2012-12-27T00:14:37.793 に答える