c# – 该成员没有受支持的SQL转换.尝试访问LINQ to SQL语句中的Partial类中的属性时. Lambda表达?

我的数据库中有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属性.即使它违反了一点干.

点赞