Wae*_*ani 2 c# linq asp.net-mvc entity-framework
我尝试过滤返回到kendo组合框的数据,过滤基于ID,我需要返回包含过滤文本的所有记录,而不仅仅是等于1,所以我做的是将ID转换为字符串为以下剪辑
Items = Mapper.Map<List<PurchaseOrder>, List<PurchaseOrderViewModel>>(
purchaseOrderRepository.GetMany(x =>
x.PurchaseOrderID
.ToString()
.Contains(text))
.ToList());
Run Code Online (Sandbox Code Playgroud)
但它始终返回linq实体不识别方法'system.string tostring()'
所以我试图将dbset转换为where语句之前的列表,因为我在另一篇文章中发现 LINQ to Entities无法识别MVC 4中的方法'System.String ToString()'方法 但是我得到另一个错误说列表没有包含Where的定义(dbSet是IDbSet的实例)
public virtual IList<T> GetMany(Expression<Func<T, bool>> where)
{
return dbset.ToList().Where(where).ToList();
}
Run Code Online (Sandbox Code Playgroud)
这是我的原始(当前)获取方法
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<T> where T : class
{
private SSSDBEntities dataContext;
private readonly IDbSet<T> dbset;
protected RepositoryBase(IDatabaseFactory databaseFactory)
{
DatabaseFactory = databaseFactory;
dbset = DataContext.Set<T>();
}
protected IDatabaseFactory DatabaseFactory
{
get;
private set;
}
protected SSSDBEntities DataContext
{
get { return dataContext ?? (dataContext = DatabaseFactory.Get()); }
}
public virtual IQueryable<T> GetMany(Expression<Func<T, bool>> where)
{
return dbset.Where(where);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我可以做任何其他事情来解决这个问题吗?
Mic*_*ger 10
有一个SqlFunctions类可用,它包含许多可用于LINQ的SQL函数.试试吧SqlFunctions.StringConvert
Items = Mapper.Map<List<PurchaseOrder>, List<PurchaseOrderViewModel>>(
purchaseOrderRepository
.GetMany(x => SqlFunctions
.StringConvert((double?) x.PurchaseOrderID)
.Contains(text))
.ToList());
Run Code Online (Sandbox Code Playgroud)
不幸的是,只有一个SqlFunctions.StringConvert(double? number),没有SqlFunctions.StringConvert(int? number).但我总是将整数转换为double,它按预期工作.
编辑:你ToList之前打电话Where.因此,只有在非法的情况下才能在LINQ to Entity query任何SqlFunction中调用SqlFunctions ToList().
尝试不使用GetMany方法:
purchaseOrderRepository.Set<PurchaseOrder>()
.Where(x => SqlFunctions
.StringConvert((double?) x.PurchaseOrderID)
.Contains(text))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12064 次 |
| 最近记录: |