2012-10-16 21 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()的行。

相关问题