新手Linq以SQL正确的方式映射到POCO?

Dav*_*.id 2 c# linq linq-to-sql

有一点尴尬,我想问/确定将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; }
}
Run Code Online (Sandbox Code Playgroud)

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

DataClassesDataContext db = new DataClassesDataContext();
var qry =
         from b in db.bookings
         select b
Run Code Online (Sandbox Code Playgroud)

因为数据库表预订不能/不能像我的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()
    });
}
Run Code Online (Sandbox Code Playgroud)

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

PS:公平地说,没有大量的数据需要检索......在任何特定情况下都可能有几百行.

提前致谢!

Joh*_*n H 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();
Run Code Online (Sandbox Code Playgroud)

结果几乎相同,但它可以节省你必须使用foreach.