Linq PredicateBuilder
public static IQueryable<SearchProfile> FilterData(string Filter, Repository<SearchProfileContext> dc)
{
IQueryable<SearchProfile> data = null;
var predicate = PredicateBuilder.True<SearchProfile>();
Filter = ExcludedParam(Filter);
if (!string.IsNullOrEmpty(Filter))`enter code here`
{
var stringToSplit = Filter;`enter code here`
List<string[]> arrays = new List<string[]>();
var primeArray = stringToSplit.Split('|');
for (int i = 0; i < primeArray.Length; i++)
{
string first = primeArray[i];
if (first.Contains("chkOrientation") == true)
{
string[] Array = first.Replace("chkOrientation=", "").Split(',');
predicate = predicate.And(a => Array.Contains(a.OrientaionID.ToString()));
}
if (first.Contains("chkProfession") == true)
{
string[] Array = first.Replace("chkProfession=", "").Split(',');
**predicate = predicate.And(a => Array.Contains(SqlFunctions.StringConvert((Double)a.ProfessionID)));**
}
}
data = dc.Select<SearchProfile>().Where(predicate).Distinct();
return data;
}
data = (from a in dc.Select<SearchProfile>().Where(a => a.PersonID > 0) select a).Distinct();
return data;
}
Когда я запустил свою программу, я получил эту неприятную ошибку ниже:
LINQ to Entities не распознает метод Int32 ToInteger(System.Object)
метод, и этот метод не может быть преобразован в выражение хранилища.
затем я использовал SqlFunctions.StringConvert
чтобы заставить его работать, но сгенерированный SQL LINQ не оценивался. Это пример выходных данных (он сравнивает "1" и "2" вместо 1 и 2)**
1 ответ
Почему вы приводите a.ProfessionID к удвоению? К какому типу относится.ProfessionID? Я думаю, что есть неявное преобразование в целое число, которое вызывает вызов метода ToInteger.
И почему бы вам сначала не преобразовать элементы в массиве в целое, а затем использовать в запросе массив целых чисел?