在linq中连接不同的字段类型

本文关键字:字段 类型 linq 连接 | 更新日期: 2023-09-27 18:09:05

在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。字符串EncodeMD5(System.String)'方法,此方法无法翻译

在linq中连接不同的字段类型

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

对于MD5之类的东西,最好的办法是将MD5哈希值存储在底层表和ID 中。同样,CategoryID的"增加"(不管那是什么)。因此,您的查询最终将处理这些预先计算的值:
on c.IDHash equals p.CategoryIDHash