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

Posted

技术标签:

【中文标题】在 linq 中加入不同的字段类型【英文标题】:join diffrent field type in linq 【发布时间】:2013-04-15 06:29:51 【问题描述】:

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)' 方法,这个方法不能翻译 进入商店表达式。

【问题讨论】:

现在有什么问题......? 您确定该示例符合该错误消息吗?在该示例中,LINQ 可以看到 EncodeMD5 方法和 CategoryID 属性(我希望它会抱怨这两者),但您没有显示它 increse 已更正 LINQ to Entities 无法识别方法 'System.String EncodeMD5(System.String)' 方法,并且此方法无法转换为存储表达式。 【参考方案1】:

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

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

on c.IDHash equals p.CategoryIDHash

【讨论】:

以上是关于在 linq 中加入不同的字段类型的主要内容,如果未能解决你的问题,请参考以下文章

如何通过两种不同类型的字段对 linq 查询结果进行排序 [重复]

django orm 关系 - 在不同字段中加入三个表

一个文本框怎么输入不同类型字段查询怎么实现?

.Net开源数据库设计工具Mr.E For Linq (EF 6.1) 教程枚举类型的字段

SAP MM MB52新增字段增强

Django数据模型——数据库字段类型