Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何使用Ideablade谓词描述在where子句中添加多个And和Or_.net_C# 4.0_Predicatebuilder_Devforce - Fatal编程技术网

.net 如何使用Ideablade谓词描述在where子句中添加多个And和Or

.net 如何使用Ideablade谓词描述在where子句中添加多个And和Or,.net,c#-4.0,predicatebuilder,devforce,.net,C# 4.0,Predicatebuilder,Devforce,如何在ideablade的谓词描述中的where子句中添加多个Or操作。 前 ListpdList=newlist(); DictionarypdDateList=newdictionary(); var pds=pdList.ToArray(); 如果(((pds.Length>0)| |(pdDateList.Count>0))) { CompositePredicateDescription谓词=null; 如果(pds.Length>0) { 谓词=谓词生成器和(pds); }

如何在ideablade的谓词描述中的where子句中添加多个Or操作。 前

ListpdList=newlist();
Dictionary>pdDateList=newdictionary>();
var pds=pdList.ToArray();
如果(((pds.Length>0)| |(pdDateList.Count>0)))
{
CompositePredicateDescription谓词=null;
如果(pds.Length>0)
{
谓词=谓词生成器和(pds);
}                    
List和List=null;
CompositePredicateDescription CompositePredicateDescription=null;
对于(int i=0;i0)
{   
if(谓词!=null)
{
如果(AndList.Count==2)
{
谓词.Or(AndList[0]和(AndList[1]);
}
else if(AndList.Count==1)
{
谓词.Or(AndList[0]);
}
}
}
}
}
if(谓词==null)
{
谓词=复合预测描述;
}
var filterQuery=query.Where(谓词);
data=Globals.sLDManager.ExecuteQuery(filterQuery);
如上所述,我尝试在
CompositePredicateDescription
中添加Or运算符,但它不起作用

我想运行以下查询-

从表1中选择*,其中t.field1=1,t.field2=1,t.field3=1或(t.field4=1,t.field5=1)或(t.field6=1,t.field7=1)


如何使用ideablade运行上述查询。

在这种情况下,您应该能够毫无问题地使用
CompositePredicateDescription
。它怎么不起作用

下面是一个例子:

  PredicateDescription p1 = PredicateBuilder.Make(typeof(Product), "UnitPrice", FilterOperator.IsGreaterThanOrEqualTo, 24);
  PredicateDescription p2 = PredicateBuilder.Make(typeof(Product), "Discontinued", FilterOperator.IsEqualTo, true);

  CompositePredicateDescription p3 = p1.And(p2);

  PredicateDescription p4 = PredicateBuilder.Make(typeof(Product), "UnitsInStock", FilterOperator.IsGreaterThanOrEqualTo, 1);
  PredicateDescription p5 = PredicateBuilder.Make(typeof(Product), "UnitsOnOrder", FilterOperator.IsGreaterThanOrEqualTo, 1);

  CompositePredicateDescription p6 = p1.And(p2);

  CompositePredicateDescription p7 = p3.Or(p6);

  var query = mgr.Products.Where(p7);
上面的代码将生成下面的WHERE语句(来自SQL Profiler),其模式与查询中的WHERE语句相同:

WHERE (([Extent1].[UnitPrice] >= cast(24 as decimal(18))) AND (1 = [Extent1].[Discontinued])) OR (([Extent1].[UnitPrice] >= cast(24 as decimal(18))) AND (1 = [Extent1].[Discontinued]))

如果您还没有这样做,您可能想看看关于动态WHERE子句的文章。

谢谢您的回复。。我还实现了与上面相同的代码。它对我有用。
WHERE (([Extent1].[UnitPrice] >= cast(24 as decimal(18))) AND (1 = [Extent1].[Discontinued])) OR (([Extent1].[UnitPrice] >= cast(24 as decimal(18))) AND (1 = [Extent1].[Discontinued]))