读书人

linq包含字符串查询有关问题

发布时间: 2012-12-15 15:16:03 作者: rapoo

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;
[解决办法]

引用:
如上表:
有一字符串:string str="2012,2011,2009";

想查询中表中年份包含在str中的销量总和,求解?????

设表名: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.销量);

[解决办法]
其实大家都是对的。
[解决办法]
引用:
string str="2012,2011,2009";

int sum=db.Where(x=>str.Contains(x)).Sum(x=>x.销量)//db是数据库实体

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被版主删除

读书人网 >.NET

热点推荐