如何获取特定类型的所有记录?

时间:2013-12-16 18:45:46

标签: c# linq entity-framework linq-to-entities

我是LINQ的新用户,我正在尝试开发一个简单的方法来检索每种特定类型的所有记录。

这是我的数据库架构:

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

如您所见,Items和ItemType表之间存在关系,Items和Status表之间还有另一个关系。

我想要的是创建一个方法来检索每个状态下的所有项目。例如,我有3种状态;活跃,无效,待定。 那么如何检索每种状态下的所有项目?我应该为每种状态开发一种方法吗?我应该使用Enum吗?

到目前为止,我想出了Items Table的一般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;
}

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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);
    }
}

<强>更新
来自评论的情景

getData返回字典,其中Keys是所有状态名称,当您在下拉列表中选择状态时,您必须将gridview绑定到字典中的值,如此

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

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