业务层方法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的表中加条件就麻烦了,请问有什么解决方法吗
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的表中加条件就麻烦了,请问有什么解决方法吗
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)
只能把表达式或者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痛苦死了,郁闷
http://topic.csdn.net/u/20101222/21/7a4354ca-10a5-4474-84fa-0e492547e682.html