所以,这是情况的简化版本: 我在数据库中有健身房:
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”类型的常量值。只要 在此上下文中支持原始类型或枚举类型。
答案 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
共享AmenityID
个Gym
个便利设施。如果用户没有匹配UserPrefAmenity
,则将值0视为排名。