Linq PredicateBuilder - PullRequest
       8

Linq PredicateBuilder

2 голосов
/ 22 декабря 2011
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 Ответ

0 голосов
/ 30 декабря 2011

Почему вы приводите a.ProfessionID к удвоению? К какому типу относится .ProfessionID? Я думаю, что есть неявное преобразование в целое число, которое вызывает вызов метода ToInteger.

И почему бы вам сначала не преобразовать элементы в массиве в целое, а затем использовать в запросе массив целых чисел?

...