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メモリ内のをインスタンス化してみてください。メソッドの終わりは次のようになります。

                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()

于 2012-10-16T19:38:43.513 に答える