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))