シナリオの解決策としてダイナミックLINQを試しています。これにより、ユーザーは「ダイナミックLINQ」に基づいて一連のファイルを選択できる必要があります。タグ "に割り当てられています。例えば。ダイナミックLINQを使用して異なるオブジェクトタイプの式を同時に照会する方法
File A - tagged as "a",
File B - tagged as "b",
File C - tagged as "c",
File D - tagged as "d" and "a"
だから私は「A」としてタグ付けされたすべてのファイルを検索したい場合は、私のように入力します。
tag = "a"
私は、ファイルAとファイルdになるだろう。しかし、私はまた
tag = "a" OR tag = "b"
は、だから私は、ファイルを取得するでしょう入力することができ、BとD
これだけの例では、道であります!
ので、このシナリオを考えると、私は次のコードを使用することによって、これを達成することができる午前:
List<FileMeta.Filetag> tags = fetchAllTags(file); //this fetches the tags from the file and places them in a list
if (tags != null) //just in case
{
//declare the type of parameter we are looking for - in this case a "tag"
var p = Expression.Parameter(typeof(string), "Tag");
//setup the lambda parser to accept the param type, and use the expression
var z = System.Linq.Dynamic.DynamicExpression.ParseLambda(new[] { p }, null, equation);
//for each tag in this file
foreach (FileMeta.Filetag t in tags)
{
//if it hasn't been found yet
if (!bFound)
{
bFound = (bool)z.Compile().DynamicInvoke(t.tag);
}
}
}
は、だからここに私は、ファイルからタグを取得し、それらが果たすかどうかを確認するためにそれらを列挙しています等式が入力されました。これは問題なくOKです。
私が問題があるのは、次のような状況です。
これらのファイルの「タグ」は、実際にはファイルの代替ストリーム情報に格納され、ファイルに関する事実上の「メタ」情報であるその他の情報も格納されます。ファイルには1つ以上のメタ情報が含まれている場合があります。このため、すべてが型指定されたオブジェクトからのXMLデータとしてファイルを持つ単一のストリームにシリアル化されます。上記のコードのListがFileMeta.Filetag型であることに気づいたかもしれません。すべてのオブジェクトは、Filemetabaseオブジェクトという基本オブジェクトから継承します。
私が頭を上げられないのは、別のタイプのオブジェクトを見たい場合です。 Filtateオブジェクトは、Filetagオブジェクトと同時に、Dynamic LINQで基本型(Filemetabaseオブジェクト)の各オブジェクトを渡して何らかのキャストを行うことが可能ですか?
私は、完璧なシナリオでは、このメタ情報をたとえばtag = "a" AND date = "01/01/2012"ですが、問題は「タグ」がFileTagオブジェクトにあり、「日付」がFiledateオブジェクトに明白にプロパティとして存在することです:例えば簡単なシナリオでは:
public class Filemetabaseobject
{
}
public class Filetag : Filemetabaseobject
{
public string tag { get; set; }
}
public class Filedate : Filemetabaseobject
{
public string date { get; set; }
}
解決方法はありますか?
ありがとうございます!
(tag = "a" AND tag = "b")OR tag = "c"のようなタイプのクエリを入力することができます。 a "AND tag =" b "AND tag =" c ")とする。あなたは、すべての子クラスでそれをオーバーライドし、あなたのFileMetabaseObject
にValue
という抽象読み取り専用の文字列プロパティを与えることができる
提案ありがとうございました。説明するために、Dynamic LINQに着手した理由は、この問題の解決策を見ているときに、UIにコードを書くのを効果的に試みるときに、上記と同様のことを行った人からのいくつかの投稿に出会ったからですアプリケーション内で実行されます。私が持っている問題は、ユーザーによってUIにクエリが書き込まれるということです。これを見ると、これを式としてDynamic LINQに渡してクエリを実行(実行)することができます。上記の例では、1つのタグと1つの日付だけを検索するように制限されると思います。 – wyerarch
@wyerarch私が誤解していない限り、あなたが必要とするもののためにパフォーマンスが重く聞こえます。 – sq33G