.net 如何使用Ideablade谓词描述在where子句中添加多个And和Or
如何在ideablade的谓词描述中的where子句中添加多个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); }
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]))