27

我的页面中有以下代码:

var myVar= Entity.SetName
                 .Where(p => int.Parse(p.ID) >= start &&
                  int.Parse(p.ID) <= end);

start 和 end 是 int,但p.ID是 string。所以我应该将p.ID转换为 int。但我收到以下错误:

LINQ to Entities 无法识别方法“Int32 Parse(System.String)”方法,并且该方法无法转换为存储表达式。

哪里有问题??

4

6 回答 6

22

首先,我强烈建议检查您的数据库设计,是否有充分的理由ID成为string. 我会考虑将IDDB 类型更改为int,您将通过转换摆脱这个问题

您得到的错误意味着 EF 不知道如何将该方法转换Int32.Parse()为 SQL。基本上你有两种选择如何处理:

在 linq 之外对实体进行比较:

var myVar= Entity.SetName.AsEnumerable()
                 .Where(p => int.Parse(p.ID) >= start &&
                  int.Parse(p.ID) <= end);

不推荐where这样做,因为在应用条件之前,您正在从 DB 中读取整个结果集。

或者按照关于 SO 的这篇文章中的描述制作自定义模型定义的函数:

在 EF 4.0或 实体框架中将 String 转换为 Int :我在哪里扩展 CSDL/MSL?

于 2013-01-28T09:29:00.650 回答
3

首先尝试转换为int然后传递该变量名

int catgry = Convert.ToInt32(customercategory.OWNERSHIP_TYPE);
var customerCateg = (from d in _db.tbl_SIL_CUSTOMER_CATEGORY_MST
    .Where(d => d.CAT_ID == catgry) select d.CAT_TYPE).SingleOrDefault();
于 2015-02-06T10:23:27.067 回答
0
private void LoadDetail(int id)
    {
        var sp = from category in db.ProductCategories
                 join product in db.Products on category.ProductCategoryID equals product.ProductCategoryID
                 where id == int.Parse(category.ProductCategoryID)
                 select new
                 {
                     product.ProductID,
                     product.ProductName,
                     product.ProductCode,
                     product.Deception,
                     category.CategoryName,
                     product.Quanrity,
                     product.Price
                 };
        DGVDetail.DataSource = sp.ToList();//help: Error: LINQ to Entities does not recognize the method 'Int32 Parse(System.String)' method, and this method cannot be translated into a store expression
    }

    private void DGVMaster_CellClick(object sender, DataGridViewCellEventArgs e)
    {
        int index = e.RowIndex;
        LoadDetail(index + 1);
    } 
于 2018-06-16T23:56:56.937 回答
0

要将字符串转换为 int,您必须使其可枚举,然后您可以进行排序或任何您喜欢的

  var list = db.UserEntriesTable.AsEnumerable().Select(x => new {

             Name = x.Name,

             Roll = Convert.ToInt32(x.Roll),

             Mobile = x.Mobile

        }).OrderBy(x => x.Roll).ToList();
于 2020-11-16T17:35:00.510 回答
0
int nb = EE.Stagaire.Join(EE.Filiere, S => S.IdFiliere, F => F.IdFiliere, (S, F) => new
        {
            ID = S.Id,
            Name = S.Nom,
            Prénon = S.Prenon,
            Email = S.Email,
            MoteDePass = S.MoteDePass,
            Filiere = F.Filiere1,
        }).Where(S => S.ID.ToString() == r.ToString()).Take(1).Count();
        if (nb != 0)
        {
            MessageBox.Show("find it");

        }

//如果你必须数据类型是整数,你可以这样做

于 2021-02-24T14:55:42.813 回答
-1

虽然效率不高,但您应该能够加载所有行,然后使用 LINQ to Objects:

var myVar= Entity.SetName.ToList()
                 .Where(p => int.Parse(p.ID) >= start &&
                  int.Parse(p.ID) <= end);
于 2013-01-28T09:25:47.417 回答