2017-04-27 1 views
-1

私はparams string [] argsをとり、Entity Frameworkのラムダ式に変換しようとしています。このようなparams argsをEntity Frameworkのラムダ式に変換する

何か...

public main(params string[] args) 
{ 
    DataContext context = new DataContext(); 

    foreach(string arg in args) 
    { 
     //build Query 
    } 

    context.Things.Where(/*Query*/); 
} 
+0

何? 'thing'には、指定された文字列が含まれていますか?詳細情報を追加する必要があります – Jonesopolis

+0

どのような種類のEntityFramework式ですか?これまでに何を試しましたか?少なくとも[mcve]を入力してください。 – MiGro

+0

これはかなり簡単なことです。 Expression.ParameterとExpression.Propertyなどを扱っています。私はこれの実装を探しています。 – chrisdyck

答えて

0

あなたは、文字列ベースの式を作成するために、動的LINQを使用することができます。 https://weblogs.asp.net/scottgu/dynamic-linq-part-1-using-the-linq-dynamic-query-library

これらの式は実行時に評価されるため、コンパイル時にエラーをキャッチできないという欠点があります。

また、式ツリーを使用して式を構築することもできます。 https://msdn.microsoft.com/en-us/library/bb882637(v=vs.110).aspx

これはもう少しコードですが、コンパイル時のタイプチェックの利点があります。

+0

ありがとうございました!私はこれらを見直します。 – chrisdyck

0

優れた記事はここ、ここhttps://www.codeproject.com/Articles/1079028/Build-Lambda-Expressions-Dynamically

である私のソリューションです:

public static Expression<Func<TClass, bool>> ConvertParamArgsToExpression<TClass>(string[] args) 
{ 
    Expression finalExpression = Expression.Constant(true); 

    var parameter = Expression.Parameter(typeof(TClass), "x"); 

    foreach (string arg in args) { 
     string[] values = arg.Split('='); 
     PropertyInfo prop = typeof(TClass).GetProperty(values[0]); 
     if(prop != null) 
     { 
      Expression expression = null; 
      var member = Expression.Property(parameter, prop.Name); 
      var constant = Expression.Constant(values[1]); 

      expression = Expression.Equal(member, constant); 

      finalExpression = Expression.AndAlso(finalExpression, expression); 
     } 
    } 

    return (Expression.Lambda<Func<TClass, bool>>(finalExpression, parameter)); 
} 

使用法:

Expression<Func<AdminPageObject, bool>> expression = LambdaConverter.ConvertParamArgsToExpression<AdminPageObject>(args); 
    if(expression != null) 
    { 
     items = items.Where(expression); 
    } 
関連する問題