1

Linq to SQL クラスに、実際にはデータベースに存在しないプロパティがあります。

この列は 1 回のクエリでのみ入力します (つまり、ランク付けされた検索の場合)。

            IEnumerable<BookingType> results = db.ExecuteQuery<BookingType>
            (
            "(SELECT  mm.rcount AS SearchRank, 
            b.* FROM (SELECT m.TourID AS myId, COUNT(m.RecordType) AS rcount 
            FROM (((SELECT * FROM Bookings h WHERE h.RecordType = 'H' 
                    AND h.TourArea like '%bull%')
            union
            (SELECT * FROM Bookings t WHERE t.RecordType = 'T' and t.TourGuideName like '%bull%')) ) m group by m.TourID) mm 
            INNER JOIN Bookings b ON mm.myId= b.TourID WHERE b.RecordType = 'H')", "bull"
            );

モデルの一部を次に示します。

    /// <summary>
    /// Unique identifier for a booking
    /// </summary>
    [DataMember]
    [Column(DbType = "int", IsPrimaryKey = true, AutoSync = AutoSync.OnInsert, IsDbGenerated = true)]
    public int? BookingID { get; set; }

    /// <summary>
    /// Search Ranking
    /// </summary>
    [DataMember]
    [Column(DbType = "int")]
    public int? SearchRank { get; set; }

ランク付けされた検索クエリに対してこれを実行すると、非常にうまく機能します。他のクエリを実行すると、存在しないため、「SearchRank フィールドが存在しません」というエラーが表示されます。データベースに SearchRank フィールドを配置すると、ランク付けされた検索を実行すると、フィールドは null に戻ります (おそらく、クエリの b.* 部分も SearchRank を返すためです。

モデルにある種の 'OptionalColumn' 属性を設定する方法はありますか?

それ以外の場合は、SearchRank 列を DB に配置してから、RankedSearch クエリの個々の列名を書き出す必要があります。

4

1 に答える 1