linq to entities无法将int转换为string

我尝试过滤返回到kendocombobox的数据,过滤基于ID,我需要返回包含过滤文本的所有记录,而不仅仅是等于1,所以我做的是将ID转换为字符串为以下剪辑

Items = Mapper.Map<List, List>( purchaseOrderRepository.GetMany(x => x.PurchaseOrderID .ToString() .Contains(text)) .ToList()); 

但它始终返回linq实体不识别方法’system.string tostring()’

所以我试图将dbset转换为where语句之前的列表,因为我在另一篇文章中发现LINQ to Entities无法识别MVC 4中的方法’System.String ToString()’方法但是我得到另一个错误说列表没有包含Where的定义(dbSet是IDbSet的实例)

 public virtual IList GetMany(Expression<Func> where) { return dbset.ToList().Where(where).ToList(); } 

这是我的原始(当前)获取方法

 sing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.Entity; using System.Data; using System.Linq.Expressions; using Spine.ERP.DataAccess.DbFirstDataAccess; using Spine.ERP.DataModel.Helpers; namespace Spine.ERP.DataAccess.Infrastructure { public abstract class RepositoryBase where T : class { private SSSDBEntities dataContext; private readonly IDbSet dbset; protected RepositoryBase(IDatabaseFactory databaseFactory) { DatabaseFactory = databaseFactory; dbset = DataContext.Set(); } protected IDatabaseFactory DatabaseFactory { get; private set; } protected SSSDBEntities DataContext { get { return dataContext ?? (dataContext = DatabaseFactory.Get()); } } public virtual IQueryable GetMany(Expression<Func> where) { return dbset.Where(where); } } } 

我可以做任何其他事情来解决这个问题吗?

有一个可用的SqlFunctions类,它包含许多可用于LINQ的SQL函数。 试试看SqlFunctions.StringConvert

 Items = Mapper.Map, List>( purchaseOrderRepository .GetMany(x => SqlFunctions .StringConvert((double?) x.PurchaseOrderID) .Contains(text)) .ToList()); 

不幸的是,只有一个SqlFunctions.StringConvert(double? number) ,没有SqlFunctions.StringConvert(int? number) 。 但我总是将整数转换为double,它按预期工作。

编辑:您正在调用ToList之前的位置。 因此,在ToList()非法之后,只能在LINQ to Entity query调用SqlFunctions任何SqlFunction。

尝试不使用GetMany方法:

 purchaseOrderRepository.Set() .Where(x => SqlFunctions .StringConvert((double?) x.PurchaseOrderID) .Contains(text))