我知道我遲到了,但是在將其設計爲數據模型時,我更願意添加關係表,並且該關係表應該有一個用於定義順序的屬性(例如,最差的朋友是0,最好是100)。
然後,在EF中,如果我檢索的列表應該是該順序,那麼我將明確地通過該屬性進行排序。
這意味着無論您用什麼方法查詢數據,該關係都可以始終如一地使用。所以,如果你使用EF,你可以使用它(雖然,是的,它不像Friend.Friends那麼方便,但是代碼會更清晰地表明它的意圖 - Friend.FriendRelationships.Select(p => p.Friend) .OrderBy(p => p.OrderValue)),如果您使用的是直接SQL,那麼您也可以使用它。
如果我在代碼中遇到Friend.Friends,我不知道將對其應用什麼排序。
如果你必須有,雖然它,你可以隨時添加它作爲一個非DB屬性 -
public class Friend
{
public virtual List<FriendRelationship> UnorderedFriendList { get; set; }
[NotMapped]
public IEnumerable<Friend> Friends
{
get
{
return UnorderedFriendList.Select(p => p.Friend).OrderByDescending(p => p.OrderValue);
}
}
}
感謝您的答覆。我基本上必須按照我在問題中描述的方式來解決它。我希望更多的人能夠回答,但是除了大量修改SSDL,我不認爲這是一個答案,我不想讓我的腦袋纏繞數日。 – psy 2012-01-26 14:52:49