按另一个对象列表排序对象列表VB.NET LINQ

时间:2015-05-14 18:47:39

标签: vb.net linq

所以,这是情况的简化版本: 我在数据库中有健身房:

Gym: GymID, Name
GymAmenities: GymID, AmenityID
Amenities: AmenityID

所以一个健身房,可以有0到多个“设施”。随之而来的用户优先考虑对他或她很重要的便利设施:

UserPrefAmenities: UserID, AmenityID, Ranking

现在在搜索邮政编码的健身房时,我希望搜索结果按照用户首选设施的顺序排列......

gyms = (From g In db.Gyms Where g.Zip = thisRequest.Zip Order By g.GymAmenitys.Contains(From upa In thisUser.UserPrefAmenitys Order By upa.Rank)).ToList

或类似的......

*请注意,运行上述结果为:

  

无法创建“UserPrefAmenity”类型的常量值。只要   在此上下文中支持原始类型或枚举类型。

1 个答案:

答案 0 :(得分:1)

我认为应该这样做:

gyms = (
        From g In db.Gyms 
        Where g.Zip = thisRequest.Zip 
        Order By If((From ga in g.GymAmenitys
                     Join upa In db.UserPrefAmenitys On ga.AmenityID
                                                     Equals upa.AmenityID
                     Where upa.UserID = thisUser.UserID
                     Order By upa.Rank Descending
                     Select CType(upa.Rank, integer?)).FirstOrDefault(), 0)
       ).ToList

我们的想法是,您找到的用户排名最高的UserPrefAmenity共享AmenityIDGym个便利设施。如果用户没有匹配UserPrefAmenity,则将值0视为排名。