Tag: linq to entities

ASP.NET MVC搜索页面 – 整数StartsWith On Linq + EF4

因此,在我上一篇文章中,我问如何使用LINQ和EF4构建动态搜索filter( 请参阅此处 ),最后提出了将表达式构建为字符串并使用Dynamic LINQ库将其解析为表达式的解决方案。 我解决了这个问题。 我能够生成一个Expression<Func>并将其传递给DbSet的Where()方法。 我也尝试使用MySql作为EF4背后的数据库。 当我尝试将字符串操作应用于整数时出现问题,例如搜索连续数字以1234开头的数据库记录。 我的初始表达式类似于: record.ConsecutiveNumber.ToString().StartsWith(“1234”) 。 遗憾的是,正如预期的那样,事情并不那么容易,因为EF4无法查询DbSet ,但有exception: “LINQ to Entities无法识别方法’System.String ToString()’方法,并且此方法无法转换为商店表达式。” 经过一些谷歌搜索,我发现这是一个常见的问题。 但是C’MON! 有没有办法执行搜索function,可以搜索具有以“1234”开头的连续数字的记录? 专业人士如何使用EF4实现搜索function? 这是一个属性filter。 如果我想添加多个filter怎么办? 上帝,我的头痛…:/ 谢谢! 编辑: 想法#1:存储过程怎么样? 从Linq调用MySql存储过程怎么样? 我瞄准的方式太高了吗?

如何将多个表达式传递给OrderBy for EF?

我使用的是EF 4.2,但我希望这也适用于EF 4和4.1。 我想将IQueryable和多个Expression<Func>传递给一个方法,并让该方法适当地将OrderBy和ThenBy应用于IQueryable 。 我找到了这个答案 ,并根据以下内容编写了以下方法: public IQueryable ApplyOrderBy(IQueryable query, IEnumerable<Expression<Func>> orderBy) { if (orderBy == null) { return query; } IOrderedQueryable output = null; foreach(var expression in orderBy) { if (output == null) { output = query.OrderBy(expression); } else { output = output.ThenBy(expression); } } return output ?? query; } 只要我订购的属性是string s,这样就可以正常工作,但是当我尝试按int属性排序时,我得到一个exception: 无法将类型“System.Int32”强制转换为“System.IComparable”类型。 […]

动态列表的位置

我正在尝试为各种类创建动态filter。 我们只会在运行时知道我们正在处理什么类型。 我需要ColumnName是实际列(不是字符串值)。 有没有一种简单的方法将字符串转换为列? public static List Filter (this List Source, string ColumnName, string TypeOfCompare, string CompValue) { IQueryable matches = Source.AsQueryable(); if (ColumnName.Length > 0) { matches = (IEnumerable)matches.Where(a => ColumnName == CompValue) } List ReturnList2 = new List(); ReturnList2 = matches.ToList(); return ReturnList2; }

获取LINQ中组的第一条记录?

简介:如何获得有序数据组中的前1个元素 我试图通过CarId字段进行分组,然后在每个组中,我想对DateTimeStamp字段降序进行排序。 所需数据将为每辆车提供最新的DateTimeStamp,并且只有该组中的1。 我可以达到这一点,但是在通过DateTimeStamp desc排除组中的前1名和排序组时遇到问题。 这是第一组操作后的内容 : group 1 ———————— CarId DateTimeStamp 1 1/1/2010 1 1/3/2010 1 3/4/2010 group 2 ———————— CarId DateTimeStamp 2 10/1/2009 2 1/3/2010 2 9/4/2010 我希望只有有序组中的前1名 group 1 ———————— CarId DateTimeStamp 1 3/4/2010 group 2 ———————— CarId DateTimeStamp 2 9/4/2010 Brickwall:我停止的地方,需要group by子句中的CarId和DateTimeStamp,以便稍后按DateTimeStamp排序。 也许日期的排序应该在一个单独的函数中完成,不确定。

如何在Linq查询中将DateTime转换为String?

我必须以MMM dd,YYYY格式显示日期。 var performancereviews = from pr in db.PerformanceReviews .Include(a => a.ReviewedByEmployee) select new PerformanceReviewsDTO { ReviewDate=pr.ReviewDate.ToString(“MMM dd,yyyy”), EmployeeName=pr.ReviewedByEmployee.Name, JobTitle=pr.ReviewedByEmployee.JobTitle, ReviewerComments=pr.CommentsByReviewer, EmployeeComments=pr.CommentsByEmployee }; 这是我得到的错误消息 ExceptionMessage:LINQ to Entities无法识别方法’System.String ToString(System.String)’方法,并且此方法无法转换为商店表达式。 ExceptionType:System.NotSupportedException 当我在pr.ReviewDate上应用ToString ,我得到错误。 请通过适当的解决方案指导我如何实现这一目标。 我知道在正常的C#编码中有几种选择,但在Linq我们怎么做。

LINQ to Entities中不支持指定的类型成员

我有一个名为StatusTypes的枚举类型 public enum StatusTypes { Open = 1, Allocated = 2, WorkInProgress = 3, WaitingOnRequestor = 4, WaitingOnThirdParty = 5, Monitoring = 6, Testing = 7, OnHold = 8, Complete = 9, SignedOff = 10, Reopened = 11 } 我正试图在我的存储库中使用它…. public IQueryable GetAllOutstandingIncidents() { return from i in db.Incidents where i.Status != Types.StatusTypes.SignedOff && i.Status […]

LINQ to Entities查询中可重用的谓词表达式

在我们的应用程序中,许多不同查询中出现的一组标准已经慢慢变得更加复杂。 为了避免重复此代码,我想将这些条件拆分为一个方法,该方法将条件作为表达式返回,然后可以在必要时应用它: public Expression<Func> GetComplexPredicate() { // complex predicate is returned as an Expression: return c => … } 重复使用: var result = repository.Invoice.Where(GetComplexPredicate()) 但是,下面的语句不会编译,因为c.Invoice只是一个ICollection 。 var result = repository.Customer .Where(c => c.Country == “US” && c.Invoice.Any(GetComplexPredicate())) 是否可以使用这样的表达式?

返回匿名类型的简单方法(使用LINQ使MVC成为可能)

我想在使用LINQ(特别是LINQ到实体)时实现MVC。 我这样做的方法是让Controller使用LINQ生成(或调用生成的)结果集,然后将其返回到View以显示数据。 问题是,如果我这样做: return (from o in myTable select o); 所有列都从数据库中读取,即使是我不想要的列(可能是几十列)。 而且 – 更重要的是 – 我做不到这样的事情: return (from o in myTable select new { o.column }); 因为没有办法让匿名类型安全! 我知道确实没有好的,干净的方式在3.5中这样做( 这不干净……), 但4.0怎么样? 有什么计划,甚至提议? 没有像duck-typing-for-LINQ那样的东西,或类型安全的匿名返回值(在我看来,编译器当然应该能够做到这一点),似乎几乎不可能将Controller与View完全分开。

Entity Framework如何管理映射查询结果为匿名类型?

请考虑以下示例LINQ to entity查询 from history in entities.foreignuserhistory select new { history.displayname, login=history.username, history.foreignuserid } ToTraceString()返回字符串如下: SELECT “Extent1″.”foreignuserid” AS “foreignuserid”, “Extent1″.”displayname” AS “displayname”, “Extent1″.”username” AS “username” FROM “integration”.”foreignuserhistory” AS “Extent1” 对我来说问题是列与查询的顺序不同,并且不会在示例中使用login别名。 Entity Framework在哪里存储匿名类型的映射信息? 背景:我将使用LINQ to entity进行大规模操作,使用select操作开发insert。 更新:使用select进行插入并不困难,除了未知列到属性映射算法。 可以使用元数据获取目标ObjectSet表名和列名,构建INSERT INTO tableName (column_name1, …) sql语句字符串,然后附加一些ObjectQuery.ToTraceString SELECT语句。 然后使用((EntityConnection)ObjectContext.Connection).StoreConnection和填充命令来自ObjectQuery的参数创建带有结果文本的DbCommand 。 所以问题是在插入和选择的记录中找到匹配的列顺序。

C#LINQ to Entities无法识别方法’Boolean’

我在lambda语法中有以下linq表达式: var myValue = 6; var from = 2; var to = 8; var res = MyList.Where(m => m.person.Id == person.Id && IsBetween(myValue, from, to)) .Select(x => new Person { blah blah blah }) .ToList()); IsBetween是一个简单的通用助手方法,看看我之间是否有东西: public bool IsBetween(T element, T start, T end) { return Comparer.Default.Compare(element, start) >= 0 && Comparer.Default.Compare(element, end) <= 0; […]