有一个字断IDs 是varchar(100)类型
存放着如下形式的数据:IDs
15,16,17
16,17,18
14,19
16,18
当然。。 数据是存放在数据库上面的。。
现在程序上面传过来一个List<string>("15","16")
现在要把上面含有15或16的IDs取出来。
也就是取出 15,16,17
16,17,18
16,18 这三列。。
麻烦大家先在程序中测试好再传过来。。还有一点。。 一定要连上数据库查。。
因为我试过用let 结果在内存中新建一个数据查可以。结果一连到数据库就出错。。。
当然因为LET只是创建一个变量。自然没法在SQL上。。。
Code
List<string> list = new List<string>() { "15", "16" };
//Build expression
ParameterExpression parameter = Expression.Parameter(typeof(TT), "t");
Expression prop = Expression.Property(parameter, "ID");
Expression exp = null;
foreach (string s in list)
{
Expression current = Expression.Call(
prop, typeof(string).GetMethod("Contains"), Expression.Constant(s));
exp = (exp == null ? current : Expression.Or(exp, current));
}
Expression<Func<TT, bool>> lambda =
Expression.Lambda<Func<TT, bool>>(exp, parameter);
//Query
using (TestDataContext ctx = new TestDataContext())
{
var query = ctx.TTs.Where(lambda);
foreach (TT t in query)
{
Console.WriteLine(t.ID);
}
}
用你的数据测试通过,建表如下
create table TT (
ID nvarchar(100) not null
);
我感觉好像很久没有linq的消息了....呵呵..今天突然又见了....