Tag: predicatebuilder

PredicateBuilder返回零记录

我正在使用PredicateBuilder创建一个动态Where子句来查询DataTable中的数据。 我有一个包含我需要搜索的列名和值的字典。 我只是迭代字典,如果键匹配列名,则将该键和值添加到谓词。 一切似乎工作正常,直到对数据表运行实际查询,我得到零记录:(但如果我用p => p [“年”] ==“2010”替换动态谓词,我得到记录回来。这是代码: var objectList = table.AsEnumerable(); Func predicate = GetPredicate(parms, table.Columns); var list1 = objectList.Where(predicate).ToList(); private static Func GetPredicate(Dictionary parms, DataColumnCollection dataColumnCollection) { var predicate = PredicateBuilder.False(); foreach (var parm in parms) { if (dataColumnCollection.Contains(parm.Key)) { var copy = parm; predicate = predicate.And(p => p[copy.Key] == copy.Value); } } […]

使用AND和OR的C#谓词构建器

我有以下课程: public class testClass { public string name { get; set; } public int id { get; set; } public int age { get; set; } } 和以下代码: var list = new List(); list.Add(new testClass { name = “name”, id = 1, age = 30 }); list.Add(new testClass { name = “name”, id = 2, […]

具有两个表的谓词构建器

Party可以拥有一个或多个Contact对象。 我想选择所有街道名称包含特定关键字的参与方。 如果我只想在派对中搜索,我可以使用下面的代码。 但是如何将其扩展到也在Contact中搜索? public IQueryable SearchParties(List keywords) { var predicate = PredicateBuilder.False(); foreach (string word in keywords) { var keyword = word; predicate = predicate.Or(p => p.surname.Contains(keyword)); predicate = predicate.Or(p => p.lastname.Contains(keyword)); predicate = predicate.Or(p => p.number.Contains(keyword)); } return db.Parties.Where(predicate); } 还有什么需要知道的吗? 编辑 我想我可以创建另一个谓词然后加入它们。 就像是: var predicate2 = PredicateBuilder.False(); ……并且在foreach中: predicate2 = predicate2.Or(p => […]

如何动态创建谓词

您好我想使用谓词表达式基于搜索字符串创建列表。 我有一个类型产品列表包含不同的名称。 List list1 = new List(); list1.Add(new products(“sowmya”)); list1.Add(new products(“Jane”)); list1.Add(new products(“John”)); list1.Add(new products(“kumar”)); list1.Add(new products(“ramya”)); listBox1.ItemsSource = list1; 现在我想根据用户输入过滤内容。用户将输入n个字符串,并带有’+’作为分隔符。 收到字符串后,我会将它们传递给谓词对象 private void textBox1_KeyDown(object sender, KeyEventArgs e) { List list2 = new List(); Expression<Func> predicate = PredicateBuilder.True(); if (e.Key == Key.Enter) { string Searchstring = textBox1.Text.ToString().Trim(); string[] separator = new string[] { “+” }; […]

LinqKit PredicateBuilder返回所有或非行

我开始使用LinqKit的PredicateBuilder来创建具有OR条件的谓词,这是Linq表达式无法实现的。 我面临的问题是,如果我从PredicateBuilder.True()开始PredicateBuilder.True()它返回所有行 ,如果我从PredicateBuilder.False()开始,它返回非行 ,除了我使用的表达式! 看下面的代码: var pre = PredicateBuilder.True(); pre.And(m => m.IsActive == true); using (var db = new TestEntities()) { var list = db.MyEntity.AsExpandable().Where(pre).ToList(); dataGridView1.DataSource = list; } 它应该返回具有IsActive == true的行,但它返回所有行! 我已经尝试了PredicateBuilder.True所有可能组合 PredicateBuilder.False with And | Or方法,不是它们的作品!

PredicateBuilder是如何工作的

Nutshell中的C#有一个名为PredicateBuilder的免费类,它可以在这里逐个构造LINQ谓词。 这是该方法的一个摘录,它为谓词添加了一个新表达式。 有人可以解释一下吗? (我已经看到了这个问题 ,我不想在那里得到一般答案。我正在寻找Expression.Invoke和Expression.Lambda如何构建新表达式的具体解释)。 public static Expression<Func> And (this Expression<Func> expr1, Expression<Func> expr2) { var invokedExpr = Expression.Invoke (expr2, expr1.Parameters.Cast ()); return Expression.Lambda<Func> (Expression.AndAlso (expr1.Body, invokedExpr), expr1.Parameters); }