2017-10-16 7 views
-3

私はList<string>があります。データベーステーブルの列名が格納されています。リストから選択する列

c#linqクエリからこの列(名前がリストに格納されている)のみを選択する必要があります。

が可能ですか?

私はこのコードを試してみてくださいしかし、私は、私が選択して置くことができるかわからない:

私はこのコードを試してみてください

items = items.ToList(); 
      _items.Add(new FieldItem() { FieldName = "field1" }); 
      _items.Add(new FieldItem() { FieldName = "field2" }); 
      _items.Add(new FieldItem() { FieldName = "field3" }); 
      _items.Add(new FieldItem() { FieldName = "field4" }); 

      _db.Table.Where(a => a.TimeStamp > DateTime.Now.AddHours(-1)).Select(....); 

おかげ

+1

はい、可能です。あなたが今試したことを教えてください。 – Rob

+1

サンプルリスト、予想される出力、試したものを含めてください –

+1

[質問]と[編集]を読んで、[mcve]を含めてください。 –

答えて

0

は最後に、私はリフレクションを使用しています。 文字列リストには、プロパティ名が格納されています。 名前でプロパティを取得し、値を取得します。このようにして

クラスのすべてのPropertyInfoを取得:

PropertyInfo[] propertyInfos; 
propertyInfos = typeof(MyClass).GetProperties(BindingFlags.Public | 
               BindingFlags.Static); 

プロパティ名が一致し、してプロパティ値を更新します。

property.SetValue(child, parentProperty.GetValue(parent)); 

は最適化されたソリューションではありませんが、動作します。

0

はNuGet経由Dapperを取得します。あなたのコード内で使用しているプット後

using Dapper; 

そして、あなたが行ってもいいです。あなたが今行う必要があるでしょうすべては(あなたが投稿した例を使用して)です:

using (YourDbContext _db = new YourDbContext()) 
{ 
    return _db.Database.Connection.Query($"SELECT {string.Join(",", _items.Select(if => if.FieldName))} FROM Table WHERE TimeStamp > @TimeStamp;", new { TimeStamp = DateTime.Now.AddDays(-1) }); 
} 

この方法は、あなたのすべてのフィールドを持っていることになるのIEnumerableを返します。結果はIDictionaryにキャストすることができます。ここで、キーは列名で、値は実際の値です。

我々は)最初(と結果の最初の行を取得していたのであれば、たとえば、我々はこのようなフィールドの値にアクセスできます。

var value = ((IDictionary<string, object>)result.First())["column_name"]; 
+0

ありがとうございます。それはうまくいく。 –

関連する問題