免责声明:我最近同时参加了C#2008和SubSonic 3(3.0.0.4)。我过去没有使用过Linq。
是否有一种简单的方法可以使用外键显示值进行排序,而不是FK Id(数字)?
我在ActiveRecord.tt中添加了一个新的Find方法,以帮助基于字符串字段名称进行排序,但在做了一些测试之后,我意识到即使它应该正常工作,我也不处理外键字段完全(他们只是按他们的价值排序)。
即使我需要更改访问数据的方式,项目也可以尽早完成。只是寻找建议。
答案 0 :(得分:1)
在这种情况下,LINQ是你的朋友,你只需要加入你的两个对象,然后根据外来对象的属性进行排序:
var primaryObjectsSorted =
from primaryObjects in PrimaryObject.All()
join foreignObjects in ForeignObject.All()
on primaryObjects.ForeignId equals foreignObjects.Id
orderby foreignObjects.PropertyYouWantToSortOn
select primaryObjects;
答案 1 :(得分:0)
所以你有一个表A,它将表B的id作为外键,你想要通过表B的DisplayName列而不是表B的id对表A进行排序?
实现这一目标的唯一方法是通过加入。
SELECT tableA.* FROM tableA INNLER JOIN tableB ORDER BY tableB.DisplayName
在SubSonic2中,您可以这样做,如果使用DB.Select(...)。ExecuteCollection()方法,仍然可以更新您的记录。 我认为这也应该适用于subsonic3。
但是,如果您不使用外键并且显示名称是唯一的,则只需将此值用作外键。