多个Guids的Lambda表达式

Dan*_*iel 3 .net c# linq linq-to-sql

尝试创建Lambda表达式以从包含七个Guid值中的任何一个的数据库中选择记录.

当我尝试以下内容时:

searchedOpps = searchedOpps.Where(s => s.STAGEID == stageAGuid && stageAPlusGuid && //etc);
Run Code Online (Sandbox Code Playgroud)

我得到一个Operator '&&' cannot be applied to operands of type 'bool' and 'System.Guid',相同的||(不确定哪个或者我应该使用这些运算符)

如果我尝试:

searchedOpps = searchedOpps.Where(s => s.STAGEID == stageAGuid);
searchedOpps = searchedOpps.Where(s => s.STAGEID == stageAPlusGuid);
Run Code Online (Sandbox Code Playgroud)

什么都没有回来

有人可以帮我这个吗?

Fel*_*ani 7

你可以尝试这个,如果你有一些OR操作符的键,在C#中||,用于样本:

searchedOpps = searchedOpps.Where(s => s.STAGEID == stageAGuid 
                                    || s.STAGEID == stageAPlusGuid));
Run Code Online (Sandbox Code Playgroud)

但是,如果您有一个键列表,您可以尝试使用该Contains方法,以获取示例:

List<Guid> guids = /* get your keys from somewhere */;
searchedOpps = searchedOpps.Where(s => guids .Contains(s.STAGEID));
Run Code Online (Sandbox Code Playgroud)

如果您正在使用linq到数据库(linq-to-sql,entity-framework,nhibernate等),它将生成一个IN带有所有键的运算符的查询.


ger*_*rmi 6

在第二个示例中,您正在寻找带STAGEID == stageAGuid AND的 对象STAGEID == stageAPlusGuid.你没有得到任何结果也就不足为奇了.

在您的第一个示例中,您只需要重复您要比较的键:

searchedOpps = searchedOpps
               .Where(s => s.STAGEID == stageAGuid 
               || s.STAGEID == stageAPlusGuid [...]);
Run Code Online (Sandbox Code Playgroud)

编写它的方式,编译器尝试bool通过' ORing'获得a bool(来自第一次比较)和a GUID(后面的值&&).