我是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;
}
答案 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();