使用外键值进行排序的简单方法?

时间:2010-05-14 01:09:06

标签: subsonic subsonic3 subsonic-active-record

免责声明:我最近同时参加了C#2008和SubSonic 3(3.0.0.4)。我过去没有使用过Linq。

是否有一种简单的方法可以使用外键显示值进行排序,而不是FK Id(数字)?

我在ActiveRecord.tt中添加了一个新的Find方法,以帮助基于字符串字段名称进行排序,但在做了一些测试之后,我意识到即使它应该正常工作,我也不处理外键字段完全(他们只是按他们的价值排序)。

即使我需要更改访问数据的方式,项目也可以尽早完成。只是寻找建议。

2 个答案:

答案 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。

但是,如果您不使用外键并且显示名称是唯一的,则只需将此值用作外键。