私はMyType:DynamicObjectのListを持っています。 DynamicObjectから継承するMyTypeの理由は、不明な数のプロパティを含むことができる型が必要なことです。Linq with DynamicObject
リストをフィルタリングする必要があるまで、すべて正常に動作します。
がreturn all items where any of the properties is empty string or white space?
私はMyType:DynamicObjectのListを持っています。 DynamicObjectから継承するMyTypeの理由は、不明な数のプロパティを含むことができる型が必要なことです。Linq with DynamicObject
リストをフィルタリングする必要があるまで、すべて正常に動作します。
がreturn all items where any of the properties is empty string or white space?
だけでなく、各オブジェクトのプロパティが不明ではないある限り、内部自身にあなたがそれを行うことができます:私はこのような何かを行いますLINQを行うことができます方法はあります。
あなたはDynamicObject
あなたが実装者はGetDynamicMemberNames()
実装を願って、あなたがgetting the property namesためnugetパッケージImpromptuInterfaceのメソッドを使用することができますし、オーバーコントロールを持っていない場合は、動的オブジェクトのすべてのプロパティをテストするための優れた汎用的な方法はありませんdynamically invoking those names。
return allItems.Where(x=> Impromptu.GetMemberNames(x, dynamicOnly:true)
.Any(y=>String.IsNullOrWhiteSpace(Impromptu.InvokeGet(x,y));
そうでない場合、それはあなたがそれらのメンバー値のための内部会計を見ることができ、独自のメソッドを追加することができMyType
独自のタイプだから。 (コメントから)
return allItems.Where(x => x.MyValues.Any(y=>String.IsNullOrWhitespace(x));
私はリストでLINQクエリの上に行うことができますか?
はい、ここにあなたがExpandoObject
でそれを行うことができる方法である。
var list = new List<ExpandoObject>();
dynamic e1 = new ExpandoObject();
e1.a = null;
e1.b = "";
dynamic e2 = new ExpandoObject();
e2.x = "xxx";
e2.y = 123;
list.Add(e1);
list.Add(e2);
var res = list.Where(
item => item.Any(p => p.Value == null || (p.Value is string && string.IsNullOrEmpty((string)p.Value)))
);
ExpandoObject
は、プロセスを作る、彼らは辞書にあったかのようにあなたは、プロパティと値のペアを列挙することができますインタフェースを提供しますそれらをずっと簡単にチェックすることができます。
ExpandoObjectへのポインタありがとう。私は+1を与えていますが、ExpandoObjectから継承することができず、jbtuleが直接私の質問に答えたので、回答として受け入れることはできません。 – Goran
「ExpandoObject」などの未知のプロパティを含むことができる他のタイプがあります。 'DynamicObject'の代わりに' ExpandoObject'を使うことができれば、あなたの人生はもっと簡単になります。 – dasblinkenlight
私が使用しているUIコントロールがExpandoObjectをサポートしているかどうかを確認する必要がありますが、そうであればDynamicObjectからExpandoObjectへの移行に問題はありません。問題は、Listでlinqクエリを実行することができますか? –
Goran