私はProduct
いくつかのプロパティを持つクラスを持っています:
public class Product
{
public int id { get; set; }
public string Name { get; set; }
public string Category { get; set; }
public string ProdCountry { get; set; }
}
ここvar products = List<Product>
で、事前にわからない特定のプロパティ値をフィルター処理したいとします。すべての{ propertyName, propertyValue }
ペアが一致する必要があります (AND 関係):
Dictionary<string, string> properties = GetPropertiesFromClient(); //Key = propertyName, Value = propertyValue
List<Product> products = GetProductList();
foreach(var property in properties)
{
switch (property.Key)
{
case "Name": products = products.Where(p => p.Name == property.Value);
break;
case "Category": products = products.Where(p => p.Category == property.Value);
break;
case "ProdCountry": products = products. Where(p => p.ProdCountry == property.Value);
break;
}
}
メソッドGetPropertiesFromClient()
は常にDictionary<string, string>
、どのプロパティといくつが格納されているかを事前に知らない場所を返します。
を使用しないようにするショートカットはありますswitch case
か? 何かのようなもの:
foreach(var property in properties)
{
products = products.Where(t => t.GetType().GetProperty(property.Key).GetValue(t, null) == property.Value);
}
このコードは (論理的に) 動作するはずですが、例外が発生します。
LINQ to Entities はメソッド 'System.Object GetValue(System.Object, System.Object[])' メソッドを認識せず、このメソッドはストア式に変換できません。
どうすれば目標を達成できますか?