linq包含字符串查询问题
如上表:
有一字符串:string str="2012,2011,2009";
想查询中表中年份包含在str中的销量总和,求解?????
[解决办法]
string str="2012,2011,2009";
int sum=db.Where(x=>str.Contains(x)).Sum(x=>x.销量)//db是数据库实体
[解决办法]
最好是x=>str.Split(',').Contains(x)
[解决办法]
//偷懒做法:
int sum=db.Where(x=>","+str+",".Contains(","+x.年份+",")).Sum(x=>x.销量)//db是数据库实体
[解决办法]
我现在用
return from p in db
where str.Contains(p.年份)
select p;
来获取数据集时出现如下错误:
对于方法 String.Contains,只支持可在客户端上求值的参数
[解决办法]
return from p in db.表名.ToList()
where str.Contains(p.年份)
select p;
[解决办法]
[解决办法]
表名.where(x=>str.Split(',').Contains(x.年份)).Sum(x.销量);
[解决办法]
发个自己扩展的方法:
#region 为IQueryable<T>类型实现In操作
public static IQueryable<T> In<T, Property>(this IQueryable<T> query, Expression<Func<T, Property>> lambda, IEnumerable<Property> values)
{
var para = lambda.Parameters.Single();
if (!values.Any())
return query.Where(error => false);
var exps = values.Select(exp => (Expression)Expression.Equal(lambda.Body, Expression.Constant(exp, typeof(Property))));
var finalEXP = exps.Aggregate((begin, end) => Expression.OrElse(begin, end));
return query.Where(Expression.Lambda<Func<T, bool>>(finalEXP, para));
}
#endregion
//调用方式:
var arr="2012,2011,2009".Split(',');
var query=dbcontext.model.In(x=>x.年份,arr).Sum(x=>x.销量);