如何在LINQ中使用“in”where子句,其中字符串集将由列表提供?

时间:2014-07-08 06:33:58

标签: c# linq linq-to-sql

我需要使用LINQ搜索数据源。

本质上,我想要的查询类似于:

select * from table where id in ("1","2","4");

增加的“复杂性”是括号内的值将来自字符串列表。

这是我的代码:

    public void getAdUserData(List<String> _inADUserDatas)
    {
        var records = from _adUserDatas in _adUserDataDBDataContex.ADUserDatas
            where
                new string[] { (char)34 + String.Join((char)34 + "," + (char)34, _inADUserDatas) + (char)34 }.Contains(_adUserDatas.fan)
            orderby _adUserDatas.fan
            select _adUserDatas;

        var test = records.ToList();
        Console.WriteLine((char)34 + String.Join((char)34 + "," + (char)34, _inADUserDatas) + (char)34);

可以看出,我使用String.join将我的列表转换为逗号分隔的字符串,其中每个字符串都用双引号括起来。

我也尝试过使用下面的代码而没有任何运气。

  new string[] {String.Join(",", _inADUserDatas) }.Contains(_adUserDatas.fan)

我还尝试在列表中手动输入一些ID到查询中,我正在获取记录。

我相信我做得对,但它没有返回任何记录。变量测试的计数为0.

任何想法都可能出错?我通过在stackoverflow中结合多个讨论,特别是this link herethis other link,将想法提交给我的代码。

非常感谢

4 个答案:

答案 0 :(得分:2)

在列表本身上调用Contains。查询提供程序应该开箱即用:

var records = from _adUserDatas in _adUserDataDBDataContex.ADUserDatas
              where _inADUserDatas.Contains(_adUserDatas.fan)
              orderby _adUserDatas.fan
              select _adUserDatas;

答案 1 :(得分:1)

只需在您的收藏中使用contains:

var records = from _adUserDatas in _adUserDataDBDataContex.ADUserDatas
              where _inADUserDatas.Contains(_adUserDatas.fan)
              orderby _adUserDatas.fan
              select _adUserDatas;

答案 2 :(得分:0)

您可以使用下面提到的代码

var list=_adUserDataDBDataContex.ADUserDatas.Where(p=>p.Contains(_adUserDatas.fan));

答案 3 :(得分:0)

ids的数据类型是什么?

一个简单的集合。其中(s =&gt; ids.Contains(s))将转换为“in” 我不确定linq to SQL如何翻译这些类型的查询,但是您不需要在EF中使用逗号加入,无需手动尝试创建逗号分隔列表即可尝试。