1

私はそのようなクラスを持っています:

public class SomeClass
{
    public string Text1 { get; set; }

    public string Text2 { get; set; }

    public int Number { get; set; }
}

そして、私はこのクラスオブジェクトのリストを持っています:

List<SomeClass> myList = new List<SomeClass>();

LINQ (ラムダ構文) を使用してこのリストをクエリしたい:

var result = myList.Where(obj => obj.Text1 == "SomeString");

この LINQ クエリを実行するために、プロパティを渡す方法はありますか (たとえば、文字列名で)。この例では、Text1 プロパティで検索しますが、この検索を (実行時に決定される) Text1 または Text2 で動的に呼び出したいとしましょう。この検索が実行されるプロパティ名を渡し、このプロパティが文字列であるかどうかを確認して、この検索を最初に実行できるようにしたいと考えています。

それは可能ですか?リフレクションとエクスプレッションが関係していることは知っていますが、よくわかりません。

ありがとう

4

2 に答える 2

1

式ツリーを使用できますか?

string memberName = "Text1", value = "SomeString";
var p = Expression.Parameter(typeof(SomeClass), "obj");
var predicate = Expression.Lambda<Func<SomeClass, bool>>(
    Expression.Equal(
        Expression.PropertyOrField(p, memberName),
        Expression.Constant(value,typeof(string))
    ), p);
var result = myList.AsQueryable().Where(predicate);

または最後の行の代替:

var result = myList.Where(predicate.Compile());
于 2013-08-14T11:06:26.083 に答える