いくつかのパラメーターに基づいてさまざまなクエリを動的に生成する関数を作成しようとしています。LINQ構文について少し混乱していて、正しく実行しているかどうかわかりません。
文字列タイプのパラメータのセットは、「search」(検索テキストボックス値の場合)、「searchfield」(検索対象)、「limit_begin」、「limit_end」で、行数と開始場所を示します。注文するフィールドの「order_by」。並べ替える方法の「order_sort」。
以前、stackoverflowでこの「getpropertyvalue」リフレクション関数を見つけました。私自身の解釈に基づいて、意図したとおりに機能することを期待しています。
private static object GetPropertyValue(object obj, string property)
{
System.Reflection.PropertyInfo propertyInfo = obj.GetType().GetProperty(property);
return propertyInfo.GetValue(obj, null);
}
if (order_sort == "ASC")
{
(from a in entities.UserTable
where GetPropertyValue(a, searchfield).ToString().Contains(search)
select a)
.OrderBy("a." + order_by)
.Skip(Convert.ToInt32(limit_begin))
.Take(Convert.ToInt32(limit_end))
.ToList();
}
else if (order_sort == "DESC")
{
(from a in entities.UserTable
where GetPropertyValue(a, searchfield).ToString().Contains(search)
select a)
.OrderByDescending("a." + order_by)
.Skip(Convert.ToInt32(limit_begin))
.Take(Convert.ToInt32(limit_end))
.ToList();
}
「Orderby」行でエラーが発生し、VS2008はそれを赤で強調表示して、引数のタイプを使用法から推測できないことを示しています。