2010-05-14 84 views
0

声明:我最近同时跳到了C#2008和SubSonic 3(3.0.0.4)。过去我没有使用过Linq。使用外键值进行排序的简单方法?

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

我在ActiveRecord.tt中添加了一个新的Find方法来帮助基于字符串字段名进行排序,但是在做了一些测试之后,我意识到尽管它的工作方式应该是这样,但我并没有处理外键领域(他们只是按照他们的价值进行排序)。

即使我需要改变我访问数据的方式,它在项目中足够早了。只是寻求建议。

回答

0

因此,你有表A,其中表B的id作为外键,并且你想通过表B的DisplayName列对表A进行排序,而不是对表B的ID进行排序?

实现此目的的唯一方法是通过连接。

SELECT tableA.* FROM tableA INNLER JOIN tableB ORDER BY tableB.DisplayName 

在SubSonic2你能做到这一点,并且仍然可以,如果你使用DB.Select(...)来更新您的记录。ExecuteCollection()方法。 我认为这也应该与亚音速3。

但是,如果您不使用外键并且显示名称是唯一的,那么您应该将此值用作外键。

+0

就我而言,我并不需要编辑的记录。我正在使用它来填充网格。该网格应该支持通过点击字段进行分页和排序(首先是asc,然后在同一字段上单击第二个字母)。 你建议链接到显示字段而不是Id会在大多数情况下适用于我,虽然会有不适用的情况。 在我决定走向最佳路线之前,我会先看看我的所有选项,并做更多的研究。 – 2010-05-14 14:06:28

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; 
+0

亚当, 我昨天晚上一直在做类似的事情,我的问题是我的排序字段和顺序是动态的。这就是为什么我在activerecord.tt中创建了一个自定义的Find方法。 我想我可以用LINQ代码做同样的事情,但更多地考虑它,我认为我的数据库设计可能比这更多的问题。我的FK可能(正如SchlaWiener所说)在这种情况下也是独一无二的显示领域。 但是我确定在某些时候我会遇到一个我需要更多的情况,LINQ似乎处理我需要的99%。 我相信,我需要更彻底地思考这一点。 – 2010-05-14 14:02:34

相关问题