2012-08-05 118 views
2

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

截至目前,我有一个简单的类,如下所示:

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到SQL(LTS)查询如下:

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

因为数据库表预订ISN “T /不能精确地创建为我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() 
    }); 
} 

这映射我的数据心病直接,但我不知道这是否是最快/最正确的方式来实现这一目标? 对于确认上述技术是否可以接受,或者有什么方法可以改进这一点,我将不胜感激。

P.S:公平地说,没有大量的数据可以检索..也许在任何给定的情况下有几百行。

在此先感谢!

+2

也许AutoMapper可以提供帮助,但是......如果你有什么工作...... – 2012-08-05 21:47:07

+1

AutoMapper有一个关于该问题http://www.devtrends.co.uk/blog/stop-using-automapper-in-你的数据访问代码,所以你必须决定是否要使用它。 – 2012-08-05 22:02:13

+0

嘿,谢谢你们..我听说过automapper ..所以谢谢你指出,并且@Leo Luis,感谢那篇文章..写得很好 - 没有阅读所有内容,但很好理解“为什么”要么使用或不使用的东西..所以谢谢你! – 2012-08-06 06:33:21

回答

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。

+0

谢谢约翰!我迷上了做几个复数视力课程 - 只是时间就是这些事情之一!所以这个例子正是我在寻找的东西 - 感觉它必须是这样的,实际上文章@Leo Luis张贴(上面,实际上关于automapper /不使用)显示了一个像你这样的例子,所以谢谢你确认,非常感谢 - 使代码更易于阅读/减少打字的任何事情都是好事! – 2012-08-06 06:35:45

+0

@DavidSheardown很高兴帮助!希望这些课程对你有好处。 :) – 2012-08-06 10:34:19