在 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 的方法,但它不能执行它从未听说过的事情(increse
、EncodeMD5
等)它怎么知道SQL要写吗?
对于像 MD5 这样的东西,最好的办法是将 MD5 哈希值与 ID 一起存储在基础表中。 CategoryID
的“增加”(不管是什么)也是如此。因此,您的查询最终会处理这些预先计算的值:
on c.IDHash equals p.CategoryIDHash
【讨论】:
以上是关于在 linq 中加入不同的字段类型的主要内容,如果未能解决你的问题,请参考以下文章
如何通过两种不同类型的字段对 linq 查询结果进行排序 [重复]