1

この 3 つのテーブルを照会するには、助けが必要です。RentCommunityFeature と RentPropertyFeature は、RentUnitListing と多対多の関係にあります。私の問題は、これら 3 つのテーブルをクエリすることができないことです。私が欲しいのは、特定の機能を備えたすべての賃貸物件です。たとえば、RentCommunityFeature に「プール」があり、RentPropertyFeature に「駐車場」がある場合、「プール」と「駐車場」を持つ RentUnitListing のすべてのレコードが必要です。駐車場がない場合、結果は「プール」のみで表示されます。

以下のクエリを試しましたが、正しくない結果が得られます。myCommunityFeatureId または myPropertyFeatureId が -1 の場合、重複した結果が表示されます。DBで空の場合、それらを-1に初期化しました。

どんな助けでも大歓迎です。

var AllAds = from r in _db.RentUnitListings
             from cf in r.RentCommunityFeatures                    
             from pf in r.RentPropertyFeatures
             where (myCommunityFeatureId > 0) ? (cf.RentCommunityFeatureID == myCommunityFeatureId && cf.RentUnitListings.) : (myCommunityFeatureId == -1)
             where (myPropertyFeatureId > 0) ? (pf.RentPropertyFeatureID == myPropertyFeatureId) : (myPropertyFeatureId == -1)
             select r;

public partial class RentCommunityFeature
{

    public int RentCommunityFeatureID { get; set; }
    public string RentCommunityFeatureDescription { get; set; }

    public virtual ICollection<RentUnitListing> RentUnitListings { get; set; }
}

public partial class RentPropertyFeature
{


    public int RentPropertyFeatureID { get; set; }
    public string RentPropertyFeatureDescription { get; set; }

    public virtual ICollection<RentUnitListing> RentUnitListings { get; set; }
}

public partial class RentUnitListing
{
    public Guid RentUnitListingID { get; set; }
    public string RentUnitListingShortDescription { get; set; }   
    public virtual ICollection<RentCommunityFeature> RentCommunityFeatures { get; set; }
    public virtual ICollection<RentPropertyFeature> RentPropertyFeatures { get; set; }        
}
4

1 に答える 1

1
var listings = _db.RentUnitListings
    .Where(rul => rul.RentCommunityFeatures
                 .Any(rcf => rcf.RentCommunityFeatureID == myCommunityFeatureId)
               || rul.RentPropertyFeatures
                 .Any(rpf => rpf.RentPropertyFeatureID == myPropertyFeatureId))
    .ToList();

つまり: を含む( )が少なくとも 1 つまたはが を含む( )が 少なくとも 1 つあるすべてのリストを返します。「OR」は排他的ではないため、返されたリストには「駐車場」機能のない「プール」または「プール」機能のない「駐車場」が含まれる場合もあれば、両方が含まれる場合もあります。いずれにせよ、返されたリストには、「プール」や「駐車場」以外にも多くの機能が含まれている可能性があります。AnyRentCommunityFeaturemyCommunityFeatureId AnyRentPropertyFeaturemyPropertyFeatureId

于 2013-09-27T19:19:09.647 に答える