1

システム管理者が選択したテーブル内のすべての値をチェックできる管理モジュールを作成する必要があります。データベースには 100 を超えるテーブルがあるためIEnumerable<object>、データと共にを返すジェネリック メソッドを作成しました。

 public IEnumerable<Object> getAllData(string tableName)
 {
    IEnumerable<Object> result = new List<Object>();
    string sql = string.Concat("SELECT * FROM ", tableName);
    using (var uow = _provider.GetUnitOfWork())
    {
        result = uow.Instance.Fetch<Object>(sql);
    }
    return result;
 }

結果の各項目は typeobject{NPoco.PocoExpando}であり、各項目のキーと値を取得して単一の文字列に変換する必要があります。コレクションで foreach を作成すると、すべてのアイテムが次のようになります。

Visual Studio ウォッチ パネル

では、これらの "Keys" および "Values" プロパティにアクセスするにはどうすればよいでしょうか? 辞書を入手することも役立つかもしれません。

編集:@Shaun Luttinの回答に感謝します。これは機能するコードです

foreach (object item in result) 
{ 
    foreach (var property in (IDictionary<String, Object>)item) 
    { 
        //Do awesome stuff! 
    }
} 
4

1 に答える 1

1

NPoco.PocoExpando のソースを見ると、 が実装されているIDictionary<string, object>ため、各アイテムをキャストしてプロパティを反復できます。

これは、 のプロパティを反復するために使用する戦略と同じExpandoObjectです。これは、戦略を示す DotNetFiddleです。

using System;
using System.Dynamic;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        dynamic resultItem = new ExpandoObject();
        resultItem.Name = "John Smith";
        resultItem.Age = 33;

        // cast as IDictionary
        foreach (var property in (IDictionary<String, Object>)resultItem)
        {
            Console.WriteLine(property.Key + ": " + property.Value);
        }
    }
}
于 2015-03-29T19:14:47.500 に答える