我需要使用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 here和this other link,将想法提交给我的代码。
非常感谢
答案 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中使用逗号加入,无需手动尝试创建逗号分隔列表即可尝试。