Silverlight 域服务调用的Where子句
在域服务调用中使用LINQ对查询设置where子句时,我遇到了一个问题 如果我没有设置where子句,它就可以正常工作,我会在已完成的事件中返回结果(我只为已完成的事件实现了eventhandler,以在这里演示我的问题)Silverlight 域服务调用的Where子句,silverlight,wcf-ria-services,Silverlight,Wcf Ria Services,在域服务调用中使用LINQ对查询设置where子句时,我遇到了一个问题 如果我没有设置where子句,它就可以正常工作,我会在已完成的事件中返回结果(我只为已完成的事件实现了eventhandler,以在这里演示我的问题) 加载操作加载= _Load(_Context.GetUsersQuery()); 加载完成+=(se,ea)=> MyList.ItemsSource=load.Entities.FirstOrDefault(); 如果我在查询中放入where子句,我只会得到一个空列表。w
加载操作加载=
_Load(_Context.GetUsersQuery());
加载完成+=(se,ea)=>
MyList.ItemsSource=load.Entities.FirstOrDefault();
如果我在查询中放入where子句,我只会得到一个空列表。where子句应返回1行:)
加载操作加载=
_Load(_Context.GetUsersQuery()。其中(f=>f.UserID==UserID));
加载完成+=(se,ea)=>
MyList.ItemsSource=load.Entities.FirstOrDefault();
任何反馈都将不胜感激 好吧,我认为不可能在RIA服务查询中使用where子句。您需要在服务中实现一个方法,该方法接受UserID并将where子句放在服务中的查询上 以下是一个例子:
public IQueryable GetSuperEmployee(int-employeeID)
{
返回Context.GetEmployees().ToList())
.Where(emp=>emp.EmployeeID==EmployeeID).AsQueryable();
}
根据此
调用RIA服务时,“in”不是有效的语法。但是,您可以构建一个谓词表达式,它完全执行“in”的操作
用法:
var ids = new[] { 10, 20,30};
var inExpression = BuiltInExpression (ids);
EntityQuery<Product> listQuery =
ProductContext.GetProductsQuery().Where(inExpression);
varids=new[]{10,20,30};
var表达式=内置表达式(ids);
EntityQuery listQuery=
ProductContext.GetProductsQuery().Where(非表达式);
支持代码:
static Expression<Func<Product, bool>> BuiltInExpression(int[] ids)
{
var inputExpression = Expression.Parameter(typeof(Product), "input");
var valueExpression = Expression.Property(inputExpression, s_propertyInfo);
var inExpression =
ids
.Aggregate(
default(Expression),
(acc, v) =>
{
var vExpression = Expression.Constant(v, typeof(int?));
var compareExpression = Expression.Equal(valueExpression, vExpression);
if (acc == null)
{
return compareExpression;
}
return Expression.OrElse(acc, compareExpression);
});
inExpression = inExpression ?? Expression.Constant(true);
return Expression.Lambda<Func<Product, bool>>(
inExpression,
inputExpression
);
return inExpression;
}
静态表达式内置表达式(int[]id)
{
var inputExpression=表达式参数(产品类型),“输入”);
var valueExpression=Expression.Property(inputExpression,s_propertyInfo);
变量表达式=
身份证
.合计(
默认值(表达式),
(附件五)=>
{
var-vExpression=表达式常数(v,typeof(int?);
var compareeexpression=Expression.Equal(valueExpression,vExpression);
如果(acc==null)
{
返回比较表达式;
}
返回表达式.OrElse(acc,compareExpression);
});
无表达式=无表达式??表达式常数(真);
返回表达式。Lambda(
无言,
输入表达式
);
返回不表达;
}
如果employeeID被IList employeeID替换,我想在employeeID中查找所有emp.employeeID,你能告诉我查询结果是什么吗?我希望我的问题很清楚,我想你应该把这个问题作为一个问题,而不是评论来发布。
public IQueryable<SuperEmployee> GetSuperEmployee(int employeeID)
{
return Context.GetEmployees().ToList()
.Where(emp => emp.EmployeeID == employeeID).AsQueryable();
}
var ids = new[] { 10, 20,30};
var inExpression = BuiltInExpression (ids);
EntityQuery<Product> listQuery =
ProductContext.GetProductsQuery().Where(inExpression);
static Expression<Func<Product, bool>> BuiltInExpression(int[] ids)
{
var inputExpression = Expression.Parameter(typeof(Product), "input");
var valueExpression = Expression.Property(inputExpression, s_propertyInfo);
var inExpression =
ids
.Aggregate(
default(Expression),
(acc, v) =>
{
var vExpression = Expression.Constant(v, typeof(int?));
var compareExpression = Expression.Equal(valueExpression, vExpression);
if (acc == null)
{
return compareExpression;
}
return Expression.OrElse(acc, compareExpression);
});
inExpression = inExpression ?? Expression.Constant(true);
return Expression.Lambda<Func<Product, bool>>(
inExpression,
inputExpression
);
return inExpression;
}