2012-08-05 41 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