首页 新闻 会员 周边

Linq问题

0
悬赏园豆:20 [已解决问题] 解决于 2008-09-04 14:55

有一个字断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上。。。 

问题补充: 这样的数据 IDs 14,15,16 15,17 17,18 Null Null 17 15 请大家用以下几种的List<string>("15,17") List<string>("17") List<string>("20") 测试一下自已的数据
不若相忘于江湖的主页 不若相忘于江湖 | 初学一级 | 园豆:51
提问于:2008-09-04 13:18
< >
分享
最佳答案
0

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
);

Gray Zhang | 专家六级 |园豆:17610 | 2008-09-04 13:47
其他回答(1)
0

我感觉好像很久没有linq的消息了....呵呵..今天突然又见了....

Jared.Nie | 园豆:1940 (小虾三级) | 2008-09-04 14:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册