0

現在、オブジェクトのプロパティにアクセスするプロパティ アクセサーの LINQ 式があります。ここで、述語を評価して、プロパティ アクセサーからの結果がリスト内に含まれているかどうかを確認する LINQ 式を作成する必要があります。

ほとんどの場合、この種のことは Expression の静的メソッドを使用して行われることがわかりましたが、Expression の静的メソッドとして使用できる Contains または In がないため、どのように進めればよいかわかりません。

// A data object
internal class PersonDAL
{
    public int Age ( get; set; }
}

// A business object
public class Person
{
    private PersonDAL root { get; set; }

    public static Expression<Func<PersonDAL, int>> AgeExpression
    {
        get
        {
            return (root) => (root.Age);
        }
    }
}

ここで、AgeExpression の値が年齢のリストに含まれているかどうかを確認できるようにしたいと考えています。通常、これは、値のリストにチェックしたい値が含まれているかどうかを確認する式を書くようなものですが、式の結果を検索する値としてフィードする方法がわかりません。

少し明確にするために、すべての人を持つクエリ可能なものを取得し、未知の式が別の式の値に基づいて真と評価される人だけを取得する方法を理解しようとしています。私のサンプル ケースでは、不明なアクセサー式は人の年齢を参照しており、許容可能な年齢の別のリストに含まれているかどうかを評価できる必要があります。

4

2 に答える 2

1

なぜ式を使っているのかわかりません。あなたがそれらによって何を得るかわかりません。しかし、 の署名を に変更するAgeExpressionExpression<Func<PersonDAL, int>>、コンパイルして実行できます。

void Main()
{
    var pDal = new PersonDAL { Age = 3 };

    var ageFunc = Person.AgeExpression.Compile();
    var age = ageFunc(pDal);
    // age is 3
}

// Define other methods and classes here

// A data object
public class PersonDAL
{
    public int Age { get; set; }
}

// A business object
public class Person
{
    public Person(PersonDAL dal)
    {
        this.dal = dal;
    }

    private PersonDAL dal { get; set; }

    public static Expression<Func<PersonDAL, int>> AgeExpression
    {
        get
        {
            return (root) => (root.Age);
        }
    }
}
于 2013-04-23T16:03:16.557 に答える