私はこれらの2つの質問の違いを説明しようとするのをやめ、この質問を削除しようとしましたが、システムは私に許されません。すみません、皆さんの時間を無駄にしました。エンティティプロパティを拡張メソッドなしの変数に名前で格納する方法はありますか?
しかし、間違いなく、別々にそれぞれの質問にはアドレスこれら二つの違いがあります:
Entity.OrderBy("field name") //<-- Extension method
と
Expression<Func<TE,TK>> myvar;
Entity.OrderBy(myvar) //<-- Variable holding an Expression
私は文字列名を変換する関数を作成しようとしています拡張メソッドを使用せずにエンティティプロパティを参照するラムダ式に変換します。私たちが使用するリポジトリはLambdaを受け入れますので、拡張メソッドを送ることはできません。
// LinqPad for testing
void Main()
{
string prop = "sku";
// We can store data type of property in variable, but how
// do we convey that value in the <> brackets?
Expression<Func<[Entity type],[Property type]>> orderby;
orderby = Me.GetOrder<Product,[How do I get SKU type here?]>("sku");
Product.OrderBy(orderby).Skip(10).Take(10).Dump();
}
public static class Me
{
public static Expression<Func<TE, TK>> GetOrder<TE,TK>(
string propertyName) where TE: class
{
//Create x=>x.PropName
var propertyInfo = typeof(TE).GetProperty(propertyName);
ParameterExpression arg = Expression.Parameter(typeof(TE), "x");
MemberExpression property = Expression.Property(arg, propertyName);
var selector = Expression.Lambda<Func<TE,Object>>(property,
new ParameterExpression[] { arg });
return selector;
}
}
@ Dr.Zim変換をしていないとどうなりますか?変換が必要な理由が表示されません –
@AaronRoberts変換せずに、Entity Frameworkはintをオブジェクトに変換する作業を受け取りますが、これは理解できません。 –
@Backsこの質問を別のものと区別するために、トップ編集を追加しました。基本的にはクエリを拡張するのではなく、orderbyパラメータを変数に格納します(そのため、そのパラメータをリポジトリに渡すことができます)。 –