ダイナミック LINQ クエリを使用して、クラス内のすべてのプロパティのテキストを検索したいと考えています。次の関数を使用して式を作成しています。プロパティ名と検索テキストをメソッドに渡しています。そのメソッドでは、プロパティ タイプが String の場合、正常に動作しています。プロパティの型が int、DateTime、GUID の場合。それは機能していません。
ご存知のように、Contains メソッドは要素の配列または文字列に対してのみ使用されます。プロパティの値は、文字列にキャストする必要があると考えています。では、どうすればよいのでしょうか? 説明付きの解決策はヘルプフルです。
i thisからコードを収集しました。
public static Expression<Func<T, bool>> ContainsExp<T>(string propertyName, string contains)
{
var parameterExp = Expression.Parameter(typeof(T), "type");
var propertyExp = Expression.Property(parameterExp, propertyName);
MethodInfo method = typeof(string).GetMethod("Contains", new[] { typeof(string) });
var someValue = Expression.Constant(contains, typeof(string));
var containsMethodExp = Expression.Call(propertyExp, method, someValue);
return Expression.Lambda<Func<T, bool>>(containsMethodExp, parameterExp);
}