類似:その1のConvert a string to Linq.Expressions or use a string as Selector?文字列をlinq式に変換する方法は?
同様の1:Passing a Linq expression as a string?
同じ答えを持つもう一つの問題:
受け入れ:非常に多くの類似の質問を持っている何かを尋ねるためHow to create dynamic lambda based Linq expression from a string in C#?
理由これらの似たような質問の回答は、4年前(スコット・グーがコードマスターによって書かれたもの)から古い図書館(.net 3.5)用に書かれた図書館を参照していて、回答としてリンク以外の何かを取り除く。
ライブラリ内全体を含めることなくコードでこれを行う方法があります。これは、このような
query = "x => x.id == somevalue";
として式に文字列全体を回すために見ていないですが、代わりにのみ使用しようとしていること
public static void getDynamic<T>(int startingId) where T : class
{
string classType = typeof(T).ToString();
string classTypeId = classType + "Id";
using (var repo = new Repository<T>())
{
Build<T>(
repo.getList(),
b => b.classTypeId //doesn't compile, this is the heart of the issue
//How can a string be used in this fashion to access a property in b?
)
}
}
public void Build<T>(
List<T> items,
Func<T, int> value) where T : class
{
var Values = new List<Item>();
Values = items.Select(f => new Item()
{
Id = value(f)
}).ToList();
}
public class Item
{
public int Id { get; set; }
}
注:ここでは
は、このような状況のためにいくつかのサンプルコードですアクセスとしての文字列
query = x => x.STRING;
は、あなたがする簡単な反射をやっ除外がありますあなたの 'Func'を作る? –
@PaulPhillips - Reflectionは、渡されるクラスTのプロパティのプロパティタイプまたは名前を生成します。クラスTは、Entity Frameworkリポジトリへの接続時にタイプの参照としてのみ渡されます。すべてのクラスTのリストがリポジトリから返されます( 'repo.getList()')。 Linq式のクラスTのプロパティを含めることにリフレクションがどのように役立つでしょうか? –
あなたの例では、linq-to-objectを実行しているように見えます。この場合、プロパティの値を反射的に取得できます。しかし、あなたが別の文脈で働いているので、私はそれがうまくいくかどうかはわかりません。私はあなたがチェックできるように私の試行を投稿しました –