1

我的 Linq to SQL 类中有一个在我的数据库中实际上并不存在的属性。

我只在一个查询期间填充此列(即用于排名搜索)

            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 列放入数据库中,然后为 RankedSearch 查询写出每个单独的列名。

4

1 回答 1

1

(我不确定这是否可行)

将 virtual 添加到您的 SearchRank 属性,并从 BookingType 中删除 column 属性

e.g. public virtual int? SearchRank { get; set; }

创建一个继承 BookingType 的新类“BookingType2”

在新的类中覆盖 SearchRank 属性并添加 Column 属性。

将您的执行方法的签名更改为 BookingType2

e.g. db.ExecuteQuery<BookingType2>(...

如果它有效,您应该能够将结果转换回 BookingType。

于 2015-01-02T08:03:00.000 回答