2011-02-07 23 views
2

我有這個要求,如何在lambda表達式或linq中做到這一點?

產品可以有多個圖像和只有一個默認圖像。如果屬性isDefault等於true,則可以確定產品的默認圖像。

我想這樣做的LINQ和lambda但我在我的代碼stucked:

private class ProdcutImages 
{ 
    public Int32 ID { get; set; } 
    public String ProductID { get; set; } 
    public Boolean IsDefault { get; set; } 
    public Image Image { get; set; } 
    public String FileName { get; set; } 
} 

public void SetDefaultImage(int productID) 
{ 
    SqlConnection conn = getConnection(); 
    conn.Open(); 
    SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM product_images WHERE product_id = @ID", conn); 
    da.SelectCommand.Parameters.Add(new SqlParameter("@ID", productID)); 


    DataTable dt = new DataTable(); 
    da.Fill(dt); 

    var imageList = (from tr in dt.AsEnumerable() 
         select new ProdcutImages() 
         { 
          ID = tr.Field<int>("id"), 
          ProductID = tr.Field<string>("productId"), 
          IsDefault = tr.Field<bool>("isDefault"), 
          Image = tr.Field<Image>("image"), 
          FileName = tr.Field<string>("fileName") 
         }).ToList(); 

    pictureBox1.Image = // ??? 
    conn.Close(); 
} 
+0

您可以對isDefault標誌進行SQL檢查,以消除其餘的圖像。或者是否需要同時抓取所有圖像? – NoLifeKing 2011-02-07 15:36:16

回答

2

大概這樣的:

var img = imageList.FirstOrDefault(i => i.IsDefault); 
if (img != null) { pictureBox1.Image = img.Image; } 

,或者考慮到有人忘了的情況下設置ISDEFAULT領域的任何圖像:

var img = imageList.FirstOrDefault(i => i.IsDefault) ?? imageList.FirstOrDefault(); 
if (img != null) { pictureBox1.Image = img.Image; } 

(這將使用第一個可用的圖像,如果沒有設置爲默認)

+0

我覺得linq不會工作 – yonan2236 2011-02-07 15:39:25

+0

啊,Image屬性。對。固定那=) – Botz3000 2011-02-07 15:44:01

2

如果方法SetDefaultImage,它將使意義

SELECT * 
FROM product_images 
WHERE product_id = @ID and is_default = 1 

或類似的東西。 沒有點從數據庫帶來額外的東西,如果你不需要

1
pictureBox1.Image = imageList.FirstOrDefault(pi => pi.IsDefault); 

你甚至都不需要使用ToList了點。

0

您是否需要從特定產品的集合中選擇圖像,其中isDefault = true?

我做的事情有點不同。我全局定義了一個連接字符串(db),所以我不確定這是否和你一樣正常工作,但你應該可以修改你的方法的第一行。

這就是我想你問:

var imageList = db.DataTable 
    .Where(w => w.ID == productID && w.IsDefault == true).FirstOrDefault(); 
pictureBox.Image = imageList.Image; 

如果有任何機會,有一個以上的圖像,其中ISDEFAULT是真的,我覺得你可以看看使用的SingleOrDefault和捕獲錯誤。