我有一个函数,我得到一个id列表,我需要返回一个匹配与id相关的描述的列表.例如:
public class CodeData
{
string CodeId {get; set;}
string Description {get; set;}
}
public List<CodeData> GetCodeDescriptionList(List<string> codeIDs)
//Given the list of institution codes, return a list of CodeData
//having the given CodeIds
}
Run Code Online (Sandbox Code Playgroud)
因此,如果我自己创建sql,我会简单地执行以下操作(其中in子句包含codeIds参数中的所有值):
Select CodeId, Description FROM CodeTable WHERE CodeId IN ('1a','2b','3')
Run Code Online (Sandbox Code Playgroud)
在Linq to Sql中我似乎无法找到相当于"IN"的子句.到目前为止我发现的最好(不起作用)是:
var foo = from codeData in channel.AsQueryable<CodeData>()
where codeData.CodeId == "1" || codeData.CodeId == "2"
select codeData;
Run Code Online (Sandbox Code Playgroud)
问题是,我无法动态生成linq到sql的"OR"子句列表,因为它们是在编译时设置的.
如何使用Linq to Sql完成检查列的where子句在动态值列表中?
Jon*_*eet 154
使用
where list.Contains(item.Property)
Run Code Online (Sandbox Code Playgroud)
或者在你的情况下:
var foo = from codeData in channel.AsQueryable<CodeData>()
where codeIDs.Contains(codeData.CodeId)
select codeData;
Run Code Online (Sandbox Code Playgroud)
但你可以用点符号来做那个:
var foo = channel.AsQueryable<CodeData>()
.Where(codeData => codeIDs.Contains(codeData.CodeId));
Run Code Online (Sandbox Code Playgroud)
Nic*_*ayo 25
你也可以使用:
List<int> codes = new List<int>();
codes.add(1);
codes.add(2);
var foo = from codeData in channel.AsQueryable<CodeData>()
where codes.Any(code => codeData.CodeID.Equals(code))
select codeData;
Run Code Online (Sandbox Code Playgroud)