簡體   English   中英

linq to entities無法將int轉換為string

[英]linq to entities can not convert int to string

我嘗試過濾返回到kendo組合框的數據,過濾基於ID,我需要返回包含過濾文本的所有記錄,而不僅僅是等於1,所以我做的是將ID轉換為字符串為以下剪輯

Items = Mapper.Map<List<PurchaseOrder>, List<PurchaseOrderViewModel>>(
                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<T> GetMany(Expression<Func<T, bool>> 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<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);
        }
  }
}

我可以做任何其他事情來解決這個問題嗎?

有一個SqlFunctions類可用,它包含許多可用於LINQ的SQL函數。 試試看SqlFunctions.StringConvert

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

不幸的是,只有一個SqlFunctions.StringConvert(double? number)而沒有SqlFunctions.StringConvert(int? number) 但我總是將整數轉換為double,它按預期工作。

編輯:您是調用ToList之前Where 因此,在ToList()非法之后,只能在LINQ to Entity query調用SqlFunctions任何SqlFunction。

嘗試不使用GetMany方法:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM