2

誰でもこれで私を助けることができます:

動的linqの文字列条件の一部である必要がある動的(ExpandoObject)プロパティを持つpocoオブジェクトのコレクションがあります

元。

public class Test
{
   public int Id {get;set;}
   dynamic DynamicProperty {get;set;}
}

動的プロパティ ( ExpandoObject) にはプロパティ (IdおよびName)があります

動的Linqを使用してテストオブジェクトのコレクションをフィルタリングするにはどうすればよいですか?

IList<Test> testList;

testList.AsQueryable()
        .Where("DynamicProperty.Id == 2 or DynamicProperty.Name == "test"")
4

3 に答える 3

0

同じ IQueryable で Wheres をチェーンして、ToList で実現できる完全な式ツリーを構築します。

IList<string> testList = new List<string>() {"One", "Two", "Three", "Four", "Five"};

var filteredList = testList.AsQueryable().Where((s) => s.Length <= 4);
filteredList = filteredList.Where((s) => s[0].Equals('F'));

var results = filteredList.ToList();
于 2013-03-25T15:57:35.650 に答える
0

ありがとう、しかし、私のwhere条件は、私が投稿した例のように、動的where句で使用される文字列でなければなりません。複合プロパティ (DynamicProperty) は不明な型であり、例のようにフィルターで使用する必要があります。ExpandoObject を使用しましたが、上記の構文に問題があります(.Where("DynamicProperty.Id == 2 or DynamicProperty.Name == "test""))。そのため、文字列構造はこのようにする必要が .Where("DynamicProperty["Id"] == 2 or DynamicProperty["Name"] == "test""))あり、Expando にはIDictionary<string, object>構造があるため、すべての値は明示的に変換する必要があり、最終フィルターは次のとおりです。.Where(Convert.ToInt32("DynamicProperty["Id"]) == 2 or DynamicProperty["Name"].ToString() == "test""))これは最初のものよりも複雑です。

上記の例のような文字列フィルターを持つ問題を解決する方法

"DynamicProperty.Id == 2 or DynamicProperty.Name == "test""
于 2013-03-25T21:26:47.463 に答える
0

動的 LINQは、動的 LINQ ステートメントを作成するための文字列述語 (およびクエリ言語) をサポートする、再利用可能な小さなライブラリを提供します。

リンクをダウンロード

于 2013-03-25T15:32:00.157 に答える