2011-12-22 43 views
2
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的PredicateBuilder

LINQ到实体无法识别方法Int32 ToInteger(System.Object)方法,该方法不能被翻译成店表达。

然后,我用SqlFunctions.StringConvert使它工作,但生成的SQL LINQ没有评估。这是示例输出(它比较'1'和'2'而不是1和2)**

+0

你究竟在哪里使用'Int32.ToInteger(System.Object)'? – ivowiblo 2011-12-23 05:21:38

回答

0

为什么要将a.ProfessionID加倍?什么类型是a.ProfessionID的? 我认为有隐式转换为整数,这会导致调用ToInteger方法。

为什么不将数组中的项目转换为整数,然后在查询中使用整数?

相关问题