尝试创建一个Lambda表达式,以从包含七个Guid值中的任何一个的数据库中选择记录。
当我尝试以下操作时:
searchedOpps = searchedOpps.Where(s => s.STAGEID == stageAGuid && stageAPlusGuid && //etc);
我得到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);
什么都不返回
有人可以帮我这个吗?
答案 0 :(得分:7)
如果您使用||
运算符的某些键(在C#中为searchedOpps = searchedOpps.Where(s => s.STAGEID == stageAGuid
|| s.STAGEID == stageAPlusGuid));
,则可以尝试此操作:
Contains
但是,如果你有一个键列表,你可以尝试使用List<Guid> guids = /* get your keys from somewhere */;
searchedOpps = searchedOpps.Where(s => guids .Contains(s.STAGEID));
方法,样本:
IN
如果您正在使用linq到数据库(linq-to-sql,entity-framework,nhibernate等),它将使用var JSON_VAR = JSON.stringify(OBJECT_NAME, null, 2);
运算符生成一个查询,并为您提供所有键。
答案 1 :(得分:6)
在第二个示例中,您正在查找STAGEID == stageAGuid
AND STAGEID == stageAPlusGuid
的对象。你没有得到任何结果就不足为奇了。
在您的第一个示例中,您只需要重复您要比较的键:
searchedOpps = searchedOpps
.Where(s => s.STAGEID == stageAGuid
|| s.STAGEID == stageAPlusGuid [...]);
编写它的方式,编译器尝试通过'bool
'OR
(来自第一次比较)和bool
(GUID
来获得&&
OR
之后的值。
答案 2 :(得分:2)
您需要“或”处理您的条件并每次指定比较。
searchedOpps = searchedOpps.Where(s => s.STAGEID == stageAGuid ||
s.STAGEID == stageAPlusGuid || //etc);
请注意,对Where
的连续调用会将条件“和”在一起。
searchedOpps = searchedOpps.Where(s => s.STAGEID == stageAGuid);
searchedOpps = searchedOpps.Where(s => s.STAGEID == stageAPlusGuid);
与
相同searchedOpps = searchedOpps.Where(s => s.STAGEID == stageAGuid &&
s.STAGEID == stageAPlusGuid);
答案 3 :(得分:2)
您可以使用PredicateBuilder类:
var searchPredicate = PredicateBuilder.False<Songs>();
searchPredicate = searchPredicate.Or(g=> g == stageAGuid);
searchPredicate = searchPredicate.Or(g=> g == stageAPlusGuid);
searchedOpps = searchedOpps.Where(searchPredicate);
答案 4 :(得分:2)
您不会说出您正在使用哪种系统进行数据访问,因此我将假设它的EF和至少.NET 4。
如果您正确编写查询,LINQ-to-Entities会将其转换为SQL&#34; in&#34;条款。看看这个MSDN条目:
如果您有7种不同的指针,请执行以下操作:
Guid[] myGuidList =
{ stageAGuid, stageAPlusGuid, anotherGuid, guid4, guid5, guid6, guid7, };
var results = searchedOpps.Where(s => myGuidList.Contains(s.STAGEID));
生成的SQL将如下所示:
select * from searchedOpps where STAGEID in (<guid>, <guid>, <guid>...)