Ну, вы могли бы попробовать это:
public static IQueryable<T> WhereStartsWith<T>(this IQueryable<T> source,
Expression<Func<T, string>> projection,
List<T> list)
{
return source.Where(x => list.Any(y => projection(x).StartsWith(y)));
}
Это может не сработать, но стоило бы попробовать, прежде чем углубляться во что-то более сложное.
РЕДАКТИРОВАТЬ: Как вы говорите, вышесказанное не скомпилируется - вам нужно построить дерево выражений, представляющее бит в предложении Where
.К сожалению.Однако, прежде чем вы начнете это делать, стоит посмотреть, сработает ли это в конце концов.Попробуйте это:
List<string> list = GetPossibleStartsWithValues();
var qry = from student in entities.Students
.Where(student => list.Any(y => student.SSN.StartsWith(y)))
select new SearchedStudent
{
Name = student.Name,
SSN = student.SSN,
...
}
Если это не сработает, тогда создание более общего метода не поможет: (