2012-10-16 24 views
0

我遇到了一個問題,我試圖在存儲庫中構建一個包含來自數據庫中不同表的多個連接的Linq查詢,然後將其作爲控制器顯示的對象返回。我得到的錯誤是:「指定的轉換無效。」如何解決使用帶多個連接的linq查詢時「指定的強制轉換無效」錯誤?

問題部分似乎是當我嘗試從我的查詢傳遞對象,我不知道如何解決這個問題。 (我對網絡開發還比較陌生,並試圖學習基礎知識)。

下面是我的倉庫代碼:

public ListingModel GetListing(int listingId) 
{ 
     var query = from listing in listingsTable 
        where listing.ListingID == listingId 

        join feature 
        in featuresTable on listing.ListingID equals feature.ListingID into features 
        from f in features.DefaultIfEmpty() 

        join avail 
        in availabilityTable on listing.ListingID equals avail.ListingID into availability 
        from a in availability.DefaultIfEmpty() 

        join image 
        in imageTable on listing.ListingID equals image.ListingID into images 
        from i in images.DefaultIfEmpty() 

        select new ListingModel 
        { 
         Listing = listing, 
         Features = features, 
         Availability = availability, 
         Images = images 
        }; 

     return query.FirstOrDefault(); 
} 

如果它的需要,這裏的ListingModel類:

public class ListingModel 
{ 
    public Listing Listing { get; set; } 
    public IEnumerable<Feature> Features { get; set; } 
    public IEnumerable<Availability> Availability { get; set; } 
    public IEnumerable<Image> Images { get; set; } 
} 

當我嘗試在LinqPad它工作正常,準確地返回數據查詢我怎麼會想要它,所以當我嘗試傳回對象時似乎出錯了。我已經嘗試了一些這方面的東西,每次我似乎都得到相同的錯誤;我真的很難找出造成它的原因。預先感謝您提供的任何幫助。

回答

0

嘗試在查詢中選擇一個匿名對象,然後使用它在內存中實例化一個ListingModel。你的方法到底會是這樣的:

   select new 
       { 
        Listing = listing, 
        Features = features, 
        Availability = availability, 
        Images = images 
       }; 

    return query.AsEnumerable() 
       .Select(x => new ListingModel 
          { 
           Listing = x.Listing, 
           Features = x.Features, 
           Availability = x.Availability, 
           Images = x.Images 
          }) 
       .FirstOrDefault(); 

但是你不能只取外鍵關係的優勢,並在LINQ to SQL中加入相關的表的嗎?此外,爲避免創建重複的ListingModels,您應該刪除包含DefaultIfEmpty()的行。

相關問題