我的数据库中有3个表
>国家
>城市
>房子
国家表看起来像
CountryID
Name
城市表看起来像
CountryID
CityID
Name
屋
CountryID
CityID
HouseID
Name
我使用LINQ to SQL,上面的表成为类,并具有其属性等.
现在我有自己的抽象类叫
地点
并创建了部分类
继承Location位置抽象类的Country,City,House
因此可以有共同点
像FindByID()这样的功能和像.Parent这样的属性(类型为Location)
现在让我们来看看.Parent
它基本上返回每个类的Parent
所以
众议院将返回
.Parent //as City
城市将回归
.Parent //as Country
国家将返回
.Parent //as Country
现在尝试使用时
在LINQ to SQL语句中的City.Parent我得到了一个
The member 'Location`1[City].Parent' has no supported translation to SQL.
现在人们已经提到了如何使用Lambda表达式来解决这个问题.有人能给我一个很好的例子来说明这种情况
什么应该.Parent看起来像
Location Parent
{
get
{
//Please fill Lambda expression here
}
}
最佳答案 您的.Parent属性在LINQ-to-Objects中会很好,但正如消息所述,如果需要创建TSQL,它将无法知道该如何处理.它无法读取您的C#代码(当时的IL)来推断其含义.最好的情况是,你可以用某些函数来做一些返回某种形式的表达式的函数,但使用起来并不好玩.
基本上,当与ORM交互时,你只能谈论它已经知道的事情.您可以将UDF映射到数据上下文并使用它,但同样 – 不是很好.
要使用Expression,您需要使用Expression.Invoke和自动滚动的lambdas(当它们组合起来做有趣的事情时,比如将它们与期望值进行比较);它真的不会很好.我可能会在一起得到一个例子,但坦率地说,我认为你的DAL /存储库不应该使用这些额外的属性,而是将自己限制为使用ORM属性.即使它违反了一点干.