2010-10-12 19 views
3

我有一個現有的類圖像,在我的應用程序中廣泛使用。 我需要返回一個通用的圖像列表(列表)到前端,但因爲沒有存儲過程在3ed方數據庫我正在問我需要使用Linq到Sql。將LINQ模型轉換爲通用列表

我創造,我在我的DAL quering數據庫,它看起來像一個DBTM文件:

ImageCat 
    ImageId 
    Name 
    Width 
    DateModified 
    Height 
    CatId 

我的圖像類是如下

public class Image 
{ 
public int Id { get; set; } 
public string Name { get; set; } 
public int Width { get; set; } 
public int Height { get; set; } 
} 

我的LINQ到SQL是如下:

var imageList = (from ic in db.ImageCats 
    where ic.CatID.Contains(category) 
select ic).ToList(); 

var finalImageList = new List<Image>(); 
foreach (ImageCat ic in imageList) 
{ 
Image image = new Image(); 
image.Id= ic.ImageID; 
image.Height = (int)ic.Height; 
image.Name = ic.Name; 
image.Width = (int)ic.Width; 

finalImageList.Add(image); 
} 

我不想通過linq sql循環結果來設置我的列表。有更容易的方法嗎。什麼是最佳做法?我不喜歡將我的dbml類暴露給表示層的想法。

回答

5

您可以在LINQ查詢直接選擇您Image

var imageList = (
    from ic in db.ImageCats 
    where ic.CatID.Contains(category) 
    select new Image() 
    { 
     Id= ic.ImageID, 
     Height = (int)ic.Height, 
     Name = ic.Name, 
     Width = (int)ic.Width, 
    } 
).ToList(); 
+0

非常感謝,效果很好 – skyfoot 2010-10-12 11:50:20

0

你能做到像這樣:

var imageList = db.ImageCats.Where(ic => ic.CatID.Contains(category)) 
.Select(ic => new Image{ Id = ic.ImageID, 
         Height = (int)ic.Height, 
         Name = ic.Name, 
         Width = (int)ic.Width}) 
.ToList(); 
+0

工作正常,但您會沿途創建一堆臨時ImageCat對象。 – 2010-10-12 11:52:53

+0

@Albin,你是對的。我已經修復了代碼。 – 2010-10-12 12:08:22

-1
IEnumerable<Image> = from ic in db.ImageCats 
        where ic.CatID.Contains(category) 
        select new Image() { Id= ic.ImageID, Height = (int)ic.Height, Name = ic.Name, Width = (int)ic.Width }.ToList(); 

我想沿着這些線路的東西會給你一個IEnumerable充滿了Image對象。我在編輯窗口中寫道,所以我可以離開。嘗試一下,讓我知道它是否適合你。

+1

大致有三個錯誤阻止了這些代碼的編譯。 – 2010-10-12 11:51:49

+0

看着現在,以及看着我看到他們選擇的答案。我想在修正這些之後還會出現更多。抱歉蹩腳的代碼(因爲它是在編輯器中編寫的),但這個想法很有道理:P – Adkins 2010-10-12 12:06:37