2

私は現在、次のようなLinqを持っています。

List<dynamic> childrenToBeRemoved = this.ItemsSource.Where(o => o.ParentID == "1234").ToList();

ここで、ItemsSource はダイナミクスの ObservableCollection です。

これは問題なく動作しますが、問題は、ParentID が変化する可能性のあるプロパティであることです。たとえば、ParentPkey や ParentKey などの名前を付けることができます。

比較に使用するプロパティを指定できる式を作成できますか?

動的 linq を使用してみましたが、ダイナミクスのコレクションを使用しても機能しません。poco のコレクションでは正常に機能します。

ありがとう...

4

4 に答える 4

6

なぜ実装自体を動的にするのですか?動的な呼び出しを簡単に行うことができます!

IEnumerable<MyItem> result;
if (condition1)
{
    result = this.Items.Where(arg => arg.ProductId == "123");
}
else if (condition2)
{
    result = this.Items.Where(arg => arg.ProductPK == "123");
}

また

Func<Item, bool> predicate;
if (condition1)
{
    predicate = item => item.ProductId == "123";
}
else if (condition2)
{
    predicate = item => item.ProductPK == "123";
}
var result = this.Items.Where(predicate);

すっごく...実際の問題についてもっと教えてください-sthを実装する現在の必要性は見当たらない-ですから、あなたの要件は明確に定義されていないと思います!

于 2012-05-08T11:44:07.817 に答える
6

クエリが動的 linq であるかどうかは問題ではありません

Expression<Func<Entity, int>> predicate = x => x.Id == myvalue;
from entity in _context.Entities.Where(predicate)
select entity;

LinkKit @ http://www.albahari.com/nutshell/linqkit.aspxの PredicateBuilder をチェックしてください。 そこにも十分な例があります

式を対応する sql に変換する責任は linq プロバイダーにあるため、使用しているプロバイダーが関連する側面をサポートしていることを確認してください。

于 2012-05-08T11:52:28.780 に答える
0

アイテムのタイプがわかっている場合は、リフレクションを使用できます。

PropertyInfo parentProp = itemType.GetProperty("ParentKey or whatever");
List<dynamic> childrenToBeRemoved = this.ItemsSource.Where(o => Equals("1234", parentProp.GetValue(o, null))).ToList();
于 2012-05-08T11:41:28.530 に答える
0

linq 式を関数に入れ、このプロパティをパラメーターとして渡します。

于 2012-05-08T11:36:43.203 に答える