Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Subsonic 使用外键值进行排序的简单方法?_Subsonic_Subsonic3_Subsonic Active Record - Fatal编程技术网

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

Subsonic 使用外键值进行排序的简单方法?,subsonic,subsonic3,subsonic-active-record,Subsonic,Subsonic3,Subsonic Active Record,免责声明:我最近跳到了C 2008,同时跳到了亚音速3.0.0.4。在过去的很多事情上我都没有使用Linq 是否有一种简单的方法可以使用外键显示值进行排序,而不是使用数字的FK Id 我在ActiveRecord.tt中添加了一个新的Find方法,以帮助根据字符串字段名进行排序,但在做了一些测试后,我意识到,尽管它可以正常工作,但我根本不处理外键字段,它们只是按值排序 即使我需要改变访问数据的方式,但在项目中这样做已经足够早了。只是想听听建议 那么您有一个表A,它的id是表B作为外键,您想按表B

免责声明:我最近跳到了C 2008,同时跳到了亚音速3.0.0.4。在过去的很多事情上我都没有使用Linq

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

我在ActiveRecord.tt中添加了一个新的Find方法,以帮助根据字符串字段名进行排序,但在做了一些测试后,我意识到,尽管它可以正常工作,但我根本不处理外键字段,它们只是按值排序


即使我需要改变访问数据的方式,但在项目中这样做已经足够早了。只是想听听建议

那么您有一个表A,它的id是表B作为外键,您想按表B的DisplayName列而不是表B的id对表A进行排序

实现这一点的唯一方法是通过连接

SELECT tableA.* FROM tableA INNLER JOIN tableB ORDER BY tableB.DisplayName
在SubSonic2中,您可以这样做,并且如果使用DB.Select….ExecuteCollection方法,仍然可以更新记录。 我认为这在亚音速3中也是可能的


但是,如果不使用外键且显示名称是唯一的,则应仅使用此值作为外键。

在这种情况下,LINQ是您的朋友,您只需将两个对象连接起来,然后根据外部对象的属性进行排序:

var primaryObjectsSorted =
  from primaryObjects in PrimaryObject.All()
  join foreignObjects in ForeignObject.All() 
    on primaryObjects.ForeignId equals foreignObjects.Id
  orderby foreignObjects.PropertyYouWantToSortOn
  select primaryObjects;

亚当,我昨晚做过类似的事情,我的问题是我的排序字段和顺序是动态的。这就是为什么我在activerecord.tt中设计了一个自定义的Find方法。我想我也可以用LINQ代码做同样的事情,但是仔细想想,我认为我的DB设计可能比这更重要。我的FK可能是Schlaviener所说的显示字段,这在本例中也是独一无二的。然而,我确信在某个时刻我会遇到一个我需要更多的情况,而LINQ似乎能处理我需要的99%。我认为,我需要更彻底地考虑这一点。就我而言,我不需要编辑记录。我用它来填充网格。网格应该支持分页和排序,首先单击字段asc,然后在同一字段上再次单击desc。在大多数情况下,您建议链接到显示字段而不是Id,这对我来说是可行的,尽管在某些情况下不会。在我决定走哪条路之前,我会看看我所有的选择,做更多的研究。