2013-12-16 34 views
0

我是LINQ的新用戶,我正在嘗試開發一種簡單的方法來檢索每種特定類型的所有記錄。如何獲取特定類型的所有記錄?

這裏是我的數據庫架構:

Items Table: ID, Code, ItemTypeID, Name, StatusID 
ItemType Table: ID, Name 
Status Table: ID, Status 

正如你看到的,有項目範圍和項目類型表之間的關係,並有項目和狀態表之間的一個又一個。

我想要的是創建一個方法,將檢索每個狀態下的所有項目。例如,我有3個狀態;有效,無效,待定。 那麼如何檢索每種狀態下的所有項目?我應該爲每種狀態開發一種方法嗎?我應該使用Enum嗎?

到目前爲止,我想出了項目表一般GETDATE()方法:

// Properties 
public int ID { get; set; } 
public string Code { get; set; } 
public int ItemTypeID { get; set; } 
public string Name { get; set; } 
public int StatusID { get; set; } 

public IEnumerable<Items> getDate() 
{ 
    List<Items> itemsList = new List<Items>(); 
    using (ItemsDBEntities context = new ItemsDBEntities()) 
    { 
     itemsList = 
      (from item in context.Items 
      select new Items() 
      { 
       Code = item.Code, 
       Name = item.Name 
      }).ToList(); 
    } 
    return itemsList; 
} 
+0

可能需要[組子句](http://msdn.microsoft.com/ru-ru/library/bb384063.aspx)或[join..into子句](http://msdn.microsoft.com/ru-ru/library /bb311040.aspx) – Grundy

回答

0
public enum ItemStatus //in accordance with the Status Table 
{ 
    Active = 1, 
    Inactive = 2, 
    Pending = 3 
} 

    public IEnumerable<Items> getDate(params ItemStatus[] selectStatus) 
    {  
     using (var context = new ItemsDBEntities()) 
     { 
     return context.Items 
       .where(item=> selectStatus.Contains((ItemStatus)item.StatusID)) 
       .select new Items() 
       { 
       Code = item.Code, 
       Name = item.Name, 
       StatusID = item.StatusID 
       }).ToList(); 
     }   
    } 

而且使用:

var listItems = getDate(ItemStatys.Active, ItemStatys.Inactive); //needed category 
+0

感謝您的幫助。對此,我真的非常感激。無論如何,它是通用的而不是硬編碼的狀態?哪一個更好? – user3107976

+0

您可以使用t4模板進行狀態枚舉 –

0

可能你需要使用join..into clause這樣

public Dictionary<string,IEnumerable<Items>> getData() 
{ 

    using (ItemsDBEntities context = new ItemsDBEntities()) 
    { 
     return (from status in context.Status 
       join item in context.Items on status.ID equals item.StatusID into itemsByStatus 
       select new 
       { 
        StatusName = status.Status, 
        items = itemsByStatus.Select(i=> 
         new Items() 
         { 
          Code = i.Code, 
          Name = i.Name, 
          StatusID = i.StatusID 
         }) 
       }).ToDictionary(e=>e.StatusName, e=>e.items); 
    } 
} 

UPDATE
您的方案從評論

getData回報字典,其中Keys是所有狀態的名字,當你選擇在下拉列表中的狀態,你必須綁定GridView控件從字典珍惜這樣

var selectedStatus = dropdownlist.SelectedValue; 
var data = getData(); 

gridView.DataSource = data[selectedStatus]; 
gridView.DataBind(); 
+0

非常感謝您的幫助。但是,我試圖使用您的方法與DropDownList控件將列出所有狀態,並基於選定的值,GridView將顯示與顯示具有該選定狀態的項目。你能告訴我如何在這種情況下使用你的方法嗎? – user3107976

+0

@ user3107976我在更新答案 – Grundy

相關問題