2017-01-06 13 views
0

Linqステートメントでどのようなプロパティを変更する方法はありますか?私はより柔軟にしようとしています次の例は機能しているダイナミックLinqからエンティティへのフレームワーク

:カテゴリ説明に基づいて、それは常に、それが現時点で書かれているとして、

public static List<SADatastore.SA_Items> BuildResourcesModel2(
     int Take = 10000, 
     int Skip = 0, 
     string filterBy = null, 
     string filterString = null, 
     string sortBy = "ItemID", 
     string sortOrder = "asc" 
     ) { 

     List<SADatastore.SA_Items> theAnswer = new List<SA_Items>(); 

     using (SADatastoreEntities db = new SADatastoreEntities(Properties.Settings.Default.ConnectionString)) { 
      theAnswer = db.SA_Items 
         .Where(x => x.SA_Categories.Description.ToLower().Contains(filterString.ToLower())) 
         .OrderBy(x=>x.ItemID) 
         .Take(Take) 
         .Skip(Skip) 
         .ToList(); 
     } 

     return theAnswer; 
    } 

あなたが見ることができるように、やっていると、アイテムID

に基づいて昇順順序は、それはそれはダイナうパラメータ

filterBy = "Manufacturer" 
filterString "Ford" 
sortBy = "Manufacturer" 
sortOder = "Desc" 

と呼ばれていますので、もし動的な方法でこれを書き換える方法はありますどこで秩序の節を変更するか?

ご協力いただければ幸いです!

+0

を掲載されますが、これはSO http://stackoverflow.com/questions/1299534/linq-passing-lambda-expression-as-parameter-to-be-を投稿見ました実行と返されたメス? – PMerlet

+0

'System.Linq.Expressions.Expression'クラスのメソッドで動的に式を構築することで、Dynamic LINQパッケージから始めて、ソート(別々にフィルタリングと並べ替え用)と同様に多くの類似の質問があります。 –

+1

https://blog.cincura.net/229310-sorting-in-iqueryable-using-string-as-column-name/ –

答えて

-2
あなたのLINQクエリを分割

var items = db.Items.Where(x => x.CategoryName == "Category A"); 

if (sortOrder == "desc") items = items.OrderByDesc(x => x.Id); 
else items = items.OrderBy(x => x.Id); 

return items.ToList(); 
-1

あなたはリフレクションを使用してこれを行うことができるはず。

x.SA_Categories.GetType().GetProperty(filterby).GetValue(x); //this gets you the value of the property you're filtering by. 

同様の状況がhere.

+1

あなたはリフレクションで何でもできます。あなたはすべきではありません。 – benjrb

関連する問題