2

有点尴尬,我想问/确定将 Linq-To-SQL 查询映射到 POCO 的最佳方法。我目前无法使用 EF,所以坚持使用 Linq-To-SQL。

到目前为止,我有一个简单的类,如下所示:

public class DiaryEvent
{
    public Int64 ID { get; set; }
    public string ResourceCalendarID { get; set; }
    public string EventTitle { get; set; }
    public string Location { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
    public string Description { get; set; }
    public string ResourceColour { get; set; }
    public bool AllDay { get; set; }
}

我的 Linq-to-SQL (LTS) 查询如下:

DataClassesDataContext db = new DataClassesDataContext();
var qry =
         from b in db.bookings
         select b

因为数据库表 bookings 不是/不能完全按照我的 DiaryEvent 类创建,所以我目前正在迭代 b ,例如:

List<DiaryEvent> EventList = new List<DiaryEvent>();
foreach (booking item in qry)
{
    EventList.Add(new DiaryEvent
    {
        AllDay = false,
        Description = item.bookingDescription,
        ID = item.bookingID,
        StartDate = (DateTime)item.startDate,
        EndDate = (DateTime)item.endDate,
        EventTitle = item.bookingName,
        Location = item.bookingLocation,
        ResourceCalendarID = item.resourceID.ToString(),
        ResourceColour = item.bookingColour.Trim()
    });
}

这可以正确映射我的数据,但是我不确定这是否是实现这一目标的最快/最正确的方法?如果有任何反馈可以确认上述技术是否可以接受,或者是否有改进的方法,我将不胜感激?

PS:公平地说,不会有大量数据要检索..在任何给定情况下可能只有几百行。

提前致谢!

4

1 回答 1

5

除非我误解了某些东西,否则您可以将代码简化为如下所示:

var EventList = (from b in db.bookings
                select new DiaryEvent
                {
                    AllDay = false,
                    Description = b.bookingDescription,
                    ID = b.bookingID,
                    StartDate = (DateTime)b.startDate,
                    EndDate = (DateTime)b.endDate,
                    EventTitle = b.bookingName,
                    Location = b.bookingLocation,
                    ResourceCalendarID = b.resourceID.ToString(),
                    ResourceColour = b.bookingColour.Trim()
                }).ToList();

结果几乎是相同的,但它使您不必使用 foreach。

于 2012-08-05T22:08:06.997 回答