Tag: dynamic linq

如何访问动态列表中的项目?

我试图弄清楚如何枚举.NET 4.5中动态LINQ .Select(string selectors)的结果。 动态linq来自System.Linq.Dynamic命名空间。 编辑:我也包括System.Linq 。 我有一个看起来像这样的方法: public void SetAaData(List data, List fields) { if (data == null || data.Count == 0) { return; } var dynamicObject = data.AsQueryable().Select(“new (” + string.Join(“, “, fields) + “)”); _aaData = dynamicObject; } 如果我单步执行代码,我可以检查dynamicObject并枚举它以查看结果(这是正确的)。 问题是我现在正试图让我的unit testing通过这个,并且我无法访问dynamicObject中的任何内容。 _aaData字段定义为dynamic类型。 在我的测试方法中,我试过这个: var hasDynamicProperties = new MyClass(); dgr.SetAaData(data, fields); // data […]

动态Linq +entity framework:动态选择的日期时间修改

我正在尝试找到一种方法在执行sql分组之前将UTC时间移动到Local。 我正在使用System.Linq.Dynamic(在这里管理https://github.com/kahanu/System.Linq.Dynamic )。 它非常适合进行动态选择而无需在编译时获得所需的字段。 在我们的例子中,我们以UTC格式存储所有日期时间。 在这个动态选择中,可能有人想要在小时,年,月等上进行分组。在这种情况下,我们必须将数据移动到本地时间,以防止混淆。 例: var select = queryable.Select(string.Format(“new ({0}, {1})”, datetimeColumn, someOtherColumn)); 通常在我们的tsql或甚至在使用lambda表达式的entity framework中,您可以添加所需的偏移量。 但是在动态linq选项中,您似乎无法像使用Linq2Sql那样执行任何日期操作,例如DateTime.AddHours(x)或DateTime.Subtract(x)。 entity framework6希望您使用DbFunctions.AddHours(x)等。但是动态linq代码在没有修改的情况下不会接受DbFunction而不会出错。 例: var select = queryable.Select(string.Format(“new (System.Data.Entity.DbFunctions.AddHours({0},7) as {0}, {1})”, datetimeColumn, someOtherColumn)); 返回错误:XXX类型中不存在属性或字段“System” (删除命名空间没有帮助)。 使用所需的代码: var select = queryable.Select(string.Format(“new ({0}.AddHours(7), {1})”, datetimeColumn, someOtherColumn)); 结果有错误:LINQ to Entities无法识别方法’System.DateTime AddHours(Double)’方法,并且此方法无法转换为商店表达式。 我想让SQL在groupby之前执行日期时间数学运算。 一旦groupby发生,就不再有UTC的概念,因为用户将看到本地化的结果集。 我担心我只是用一些扩展来更新我的github fork以支持传递entity framework扩展,但在我做之前,想看看是否有其他人有解决方案或想法。 注意:由于更改SQL数据存储技术的可能性,我没有使用DateTimeOffset。

动态LINQ查询从数据库获取Field值

可能吗? Public String Get_Filed_By_Id(string table_Name,String Field_Name,string PK_val) { string strRes=””; using(mydbcontext db=new mydbcontext()) { var x=db.table_Name.Where(p=>p.Id=PK_val).FirstOrDefault().Field_Name; strRes=Convert.Tostring(x); } return strRes; } 要么 var x=(from o in db.table_Name where o.Id=PK_val select o.Field_Name).FirstOrDefault(); 在这里,我传递Table_Name , Column_Name和Condition值( PK_val )以在特定条件( Id=Pk_val )内从Table_Name获取Column_Name 。 可能吗??

c#中的逻辑评估器(评估逻辑(&&,||)表达式)

在我的项目中有一个Logic evaluation部分,它将输入作为包含logical expressions ( true/false )的字符串。 我想评估此字符串并返回最终的布尔值。 string Logic=”1&0|1&(0&1)” //string Logic=”true AND false OR true AND (false AND true)” 这将是我的Logic 。 长度可能会增加。 有没有办法从LINQ / Dynamic LINQ评估这个表达式?

动态linq:有没有办法通过索引访问对象数据?

我需要使用Dynamic Linq进行一些内存中过滤。 我的对象只有一个索引器: public object this[int index] { } 访问我的数据就像:object [0],object [1],… 所以我的查询是这样的: // get FilterText from user at runtime // eg. filterText can be: [0] > 100 and [1] = “wpf” collection.AsQueryable().where(filterText); 有没有办法做到这一点?

如何使用动态LINQ库构建嵌套查询

如何使用Dynamic Linq库(System.Linq.Dynamic)构建以下LINQ查询? var roles = rolesCollection.Where(r => r.AssignedUsers.Where(u => u.Name.FirstName == “Patrick”).Count() > 0); rolesCollection和AssignedUsers是实现IEnumerable接口的集合。 我在考虑做这样的事情: rolesCollection.Where(“AssignedUsers.Where(\”Name.FirstName == ‘Patrick’\”).Count() > 0″); 但这不起作用。 抛出ParseException,其中包含消息“无适用的聚合方法’在哪里’存在”。 提前致谢。

动态linq建筑表达

我需要为动态搜索创建一个动态linq表达式。基本搜索工作正常,但无法使用集合。 我能够获得该书的标题和作者,但未能获得所需的页面标题。 我在行中获得了exception“left11 = Expression.Property(page1,”Heading“);” 。 我认为我建立的表达式无法识别List。 怎么可能这样呢? 请参阅以下代码和stacktraceexception。 using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; namespace XMLStorageAndFilter { public class Books { public Books() { Page = new List(); } public string Title { get; set; } public Author Author { get; set; } public List Page { get; […]

如何在Dynamic LINQ中使用Contains时动态键入Cast到字符串?

我想使用动态LINQ查询来搜索类中所有属性中的一些文本。 我正在使用以下函数来创建表达式。 我正在将属性名称和搜索文本传递给方法。 在该方法中,如果属性类型是String,那么它工作正常。 如果属性类型是int,DateTime,GUID。 然后它不起作用。 我们知道Contains方法只用于元素数组或字符串。 我认为属性的值应该输入到字符串。 那怎么办呢? 带解释的解决方案是完整的。 我收集了这个代码。 public static Expression<Func> ContainsExp(string propertyName, string contains) { var parameterExp = Expression.Parameter(typeof(T), “type”); var propertyExp = Expression.Property(parameterExp, propertyName); MethodInfo method = typeof(string).GetMethod(“Contains”, new[] { typeof(string) }); var someValue = Expression.Constant(contains, typeof(string)); var containsMethodExp = Expression.Call(propertyExp, method, someValue); return Expression.Lambda<Func>(containsMethodExp, parameterExp); }

如何从C#中的字符串创建基于动态lambda的Linq表达式?

我在从字符串创建基于Lambda的Linq表达式时遇到一些困难。 以下是使用此示例对象/类的基本情况: public class MockClass { public string CreateBy { get; set; } } 基本上我需要转换这样的字符串: string stringToConvert = “x => x.CreateBy.Equals(filter.Value, StringComparison.OrdinalIgnoreCase”; 进入谓词/ linq表达式: System.Linq.Expressions.Expression<Func> or in this example System.Linq.Expressions.Expression<Func> 所以它相当于下面Where方法中的Linq表达式: query = query.Where(x => x.CreateBy.Equals(filter.Value, StringComparison.OrdinalIgnoreCase)); 我已经尝试过使用以下帮助程序,但似乎无法弄清楚如何让它们在这种情况下工作,我希望能够从字符串中提前建立一个linq表达式: http:http: //www.albahari.com/nutshell/predicatebuilder.aspx http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx (它现在作为NuGet包提供很好地称为“DynamicQuery”)

算在哪里?

是否可以在哪里使用列表。 我想要这样的想法: public class Customer { string FirtsName; string LastName; int Number; ….. } 我想使用复选框过滤客户。 如果我选择FirstName和Number,那么将生成where子句 .where(x=> x.FirstName == “SomeFirstName” && x.Number == someNumber) 如果我只选择数字,那么将生成where子句 .where(x.Number == someNumber) 如果我选择FirstName,LastName和Number,那么将生成where子句 .where(x=> x.FirstName == “SomeFirstName” && x.Number == someNumber && x.LastName == “LastName”) 我的意思不仅是动态列名,我也想生成where子句。 列名和值来自列表: 我希望,我可以解释一下。 提前致谢。