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;
[解决办法]
设表名:TableA
年份字段:Year
销量字段:Sale
string[] str=new string[3]{"2012","2011","2009"};
var v=(from u in db.TableA
where str.Contains(u.Year.ToString())
select u.Sale).Sum();
[解决办法]
using System.Data.Linq.SqlClient;
然后参考一下代码即可
string[] listSearch = txtSearch.Value.Split(',');
List<string> list = listSearch.ToList();
List<A_WenDa> listWenDa = new List<A_WenDa>();
foreach (string search in listSearch)
{
var query = (from a in dc.A_WenDa
where SqlMethods.Like(a.GuanJianZi, string.Format("%{0}%", search))
&& a.City_Id == cityId && a.Available == true
select a).ToList<A_WenDa>();
listWenDa.AddRange(query.ToList<A_WenDa>());
}
[解决办法]
表名.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.销量);
[解决办法]
其实大家都是对的。
[解决办法]
int sum=db.Where(x=>str.Contains(x.年份)).Sum(x=>x.销量)//db是数据库实体
[解决办法]
DataTable dt = new DataTable();
//读取数据
string str = "2012,2011,2009";
System.Collections.Generic.List<string> sum = str.Split(',').ToList();
var source = dt.AsEnumerable().Where(t => sum.Contains(t.Field<int>("年份")));
[解决办法]
该回复于2012-05-09 09:56:29被版主删除