0

我遇到了一个问题,我试图在我的存储库中构建一个 Linq 查询,该查询包含来自数据库中不同表的多个连接,然后将其作为对象返回给我的控制器以显示。我得到的错误是:“指定的演员表无效。”

问题部分似乎是当我尝试从查询中传递对象时,我不确定如何解决这个问题。(我对 Web 开发还比较陌生,并试图学习基础知识)。

以下是我的存储库中的代码:

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 中尝试查询时,它可以正常工作并完全按照我想要的方式返回数据,因此当我尝试将对象传回时似乎出错了。我已经尝试了一些方法,每次我似乎都遇到了同样的错误;我很难确定是什么原因造成的。提前感谢您提供的任何帮助。

4

1 回答 1

0

尝试在查询中选择一个匿名对象,然后使用它ListingModel在内存中实例化 a。您的方法的结尾将如下所示:

                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 为您加入关联的表吗?此外,为避免创建重复的列表模型,您应该删除包含DefaultIfEmpty().

于 2012-10-16T19:38:43.513 回答