C# Linq to SQL可选列,SQL生成字段

C# Linq to SQL可选列,SQL生成字段,c#,linq-to-sql,C#,Linq To Sql,我的LINQtoSQL类中有一个属性,但它实际上不存在于我的数据库中 我只在一次查询期间填充此列,即进行排名搜索 IEnumerable<BookingType> results = db.ExecuteQuery<BookingType> ( "(SELECT mm.rcount AS SearchRank, b.* FROM (SELECT m.TourID AS my

我的LINQtoSQL类中有一个属性,但它实际上不存在于我的数据库中

我只在一次查询期间填充此列,即进行排名搜索

            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查询的每个单独的列名。

我不确定这是否有效

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

e.g. public virtual int? SearchRank { get; set; }
创建继承BookingType的新类BookingType2

e.g. public virtual int? SearchRank { get; set; }
在新类中,重写SearchRank属性并添加Column属性

将execute方法的签名更改为BookingType2

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

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

我不确定这是否有效

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

e.g. public virtual int? SearchRank { get; set; }
创建继承BookingType的新类BookingType2

e.g. public virtual int? SearchRank { get; set; }
在新类中,重写SearchRank属性并添加Column属性

将execute方法的签名更改为BookingType2

e.g. db.ExecuteQuery<BookingType2>(...
如果有效,您应该能够将结果转换回BookingType