0

在 linq 中加入不同的字段类型

public partial class Product
{
    public int ID { get; set; }

    public string CategoryID
    {
        get { return Myclass.increse(CategoryID); }
        set { CategoryID = value; }
    }
    public string Name { get; set; }

}

public partial class ProductCategory
{
    public int ID { get; set; }
    public string Name { get; set; }
}
var query = (from c in dContext.ProductCategories
                    join p in dContext.Products
                     on Myclass.EncodeMD5(c.ID.ToString()) equals p.CategoryID
                    select new { id = p.ID, cat = p.CategoryID, name = p.Name, cat1 = c.Name }
                  ).ToList();

该字段应转换为字符串然后函数运行EncodeMD5

错误:

LINQ to Entities 无法识别方法 'System.String EncodeMD5(System.String)' 方法,并且此方法无法转换为存储表达式。

4

1 回答 1

1

您不能在 LINQ-to-(某些数据库后端)中调用任意 .NET 方法 - EF(等)的全部意义在于它想要从您的表达式创建 SQL - 涉及where子句的东西。它可以使用简单的属性和运算符,以及它知道的一些方法并且可以映射到 SQL,但是它不能执行它从未听说过的事情(increseEncodeMD5等)它怎么知道要编写什么 SQL?

对于像 MD5 这样的东西,最好的办法是将 MD5 哈希ID 一起存储在基础表中。同样与CategoryID' 的“增加”(无论是什么)。因此,您的查询最终会处理这些预先计算的值:

on c.IDHash equals p.CategoryIDHash
于 2013-04-15T06:40:30.057 回答