业务层方法public IEnumerable<T> Select<T>(Func<Design, bool> predicate, Func<Design, Nodes, T> selector,
            int pageIndex, int pageSize)
        {
            System.Data.Linq.Table<Nodes> nodesTable = dataContext.GetTable<Nodes>();
            return (from d in table
                   join n in nodesTable on d.NodeID equals n.NodeID
                   where predicate(d)
                   orderby d.PublishTime descending
                   select selector(d,n)).Skip((pageIndex - 1) * pageSize).Take(pageSize);
                        
            
        }UI层调用代码Func<Model.Design, bool> predicate = d => true;
            if (RadioButtonList1.SelectedIndex == 0)
            {
                predicate = (d) => d.UserID == UserUtility.UserID;
            }
            else
            {
                predicate = (d) => d.UserID == UserUtility.UserID && d.Status == int.Parse(RadioButtonList1.SelectedValue);
            }
            var query = bll.Select(predicate, (d, n) => new 
            { 
                Title = d.Title,
                NodeName = n.NodeName,
                PublishTime = d.PublishTime,
                Status = d.Status,
                DesignID = d.DesignID
            }, AspNetPager1.CurrentPageIndex, pagesize);
执行的时候异常:方法“System.Object DynamicInvoke(System.Object[])”不支持转换为 SQL。
如果不用表达式的话就行
public IEnumerable<T> Select<T>(Expression<Func<Design,bool>> predicate, Expression<Func<Design, Nodes, T>> selector,
            int pageIndex, int pageSize)
        {
            System.Data.Linq.Table<Nodes> nodesTable = dataContext.GetTable<Nodes>();
            return table.Where(predicate)
                        .OrderByDescending(d => d.PublishTime)
                        .Join(nodesTable, d => d.NodeID, n => n.NodeID, selector)
                        .Skip((pageIndex - 1) * pageSize)
                        .Take(pageSize);
            
        }这样没有问题,但是我想在join的表中加条件就麻烦了,请问有什么解决方法吗

解决方案 »

  1.   

    我就是想在 表达式 的where语句和select用参数传递进去
      

  2.   

    1、用CreateObjectQuery
    2、
    var r=this.contextdb.学生;
    if(!string.isnullorempty(this.textbox班级.text))
       r=r.where(p=>p.班级==this.textbox班级.text)
    if(!string.isnullorempty(this.textbox性别.text))
       r=r.where(p=>p.性别==this.textbox性别.text)
      

  3.   

    这个是分成操作的,UI是调用不到DataContext的
    只能把表达式或者Func传到BLLBLL写的是
    System.Data.Linq.Table<Nodes> nodesTable = dataContext.GetTable<Nodes>();
                return (from d in table
                       join n in nodesTable on d.NodeID equals n.NodeID
                       where predicate(d)
                       orderby d.PublishTime descending
                       select selector(d,n)).Skip((pageIndex - 1) * pageSize).Take(pageSize);那个where后面是动态的,通过参数传递,select后面也是动态的,用了Linq痛苦死了,郁闷
      

  4.   

    LINQ  动态查询
    http://topic.csdn.net/u/20101222/21/7a4354ca-10a5-4474-84fa-0e492547e682.html
      

  5.   

    LS给的链接是说怎么构建查询条件,我问的是构建好条件后,怎么传递给BLL层的方法使用