Мне нужно перевести следующий код в выражение, и я объясню, почему:
results = results.Where(answer => answer.Question.Wording.Contains(term));
Результаты IQueryable
Вопрос в ISurveyQuestion
Формулировка строковая
Проблема в том, что вопрос не всегда является именем свойства LINQ to SQL.
Это даст мне PropertyInfo для фактического свойства ISurveyQuestion
private static PropertyInfo FindNaturalProperty<TMemberType>(Type search)
{
IDictionary<string,PropertyInfo> properties = new Dictionary<string,PropertyInfo>();
search.GetProperties().Each(prop =>
{
if (null != prop.PropertyType.GetInterface(typeof(TMemberType).Name))
properties.Add(prop.Name, prop);
});
if (properties.Count < 1) throw new ArgumentException(String.Format("{0} has no properties of type {1}", search.Name, typeof(TMemberType).Name));
if (properties.Count == 1) return properties.Values.First();
search.GetInterfaces().Each(inter =>
{
inter.GetProperties().Each(prop =>
{
if (null != prop.PropertyType.GetInterface(typeof(TMemberType).Name))
properties.Remove(prop.Name);
});
});
if (properties.Count < 1) throw new ArgumentException(String.Format("{0} has no properties of type {1} that are not members of an interface", search.Name, typeof(TMemberType).Name));
if (properties.Count > 1) throw new AmbiguousMatchException(String.Format("{0} has more than one property that are of type {1} and are not members of an interface", search.Name, typeof(TMemberType).Name));
return properties.Values.First();
}
Как только я получу PropertyInfo, как мне перевести это в дерево выражений?
EDIT:
Что мне в основном нужно:
results = results.Where(answer => answer.GetQuestionProperty().GetValue(answer).Wording.Contains(term));
Но это не сработает, поэтому мне нужно самому построить дерево выражений для linq-to-sql.