我是使用Linq的新手,刚刚开始了一个侧面项目来学习一些基础知识。我目前正在使用Linq到Sql,我所有的DB Table关系都运行得很好。目前我有一个Client表和一个Project表。每个客户可以有一个或多个项目。因此,正如您所期望的那样,在Linq发挥其魔力之后,每个Client对象都有一个Project对象的集合。
我正在使用下面的代码并且效果很好,但我认为有更好的方法。我需要传递我的方法一个ProjectID,然后从客户端中选择该项目:
private void PopulateStatusView(int projectID)
{
MyDataContext db = new MyDataContext();
var client = (from u in db.Clients
where u.id == Convert.ToInt32(Session["ClientID"])
select u).SingleOrDefault();
if (client != null)
{
foreach (Project currentProject in client.Projects)
{
if (currentProject.id == projectID)
{
// Project Selected Here
statusProjectName.Text = currentProject.name;
}
}
}
else
{
// Session Expired
}
}
如果有更好的解决方案而不是循环每个项目,任何人都可以告诉我。
谢谢。
答案 0 :(得分:2)
获取具有特定项目ID的客户端:
var client = (from u in db.Clients
where u.id == Convert.ToInt32(Session["ClientID"]) &&
u.Projects.Any(x=>x.id == projectID)
select u).SingleOrDefault();
获得项目:
var project = (from u in db.Clients
where u.id == Convert.ToInt32(Session["ClientID"]) &&
u.Projects.Any(x=>x.id == projectID)
select u.Projects.Where(x=>x.id == projectID).Single()).SingleOrDefault();
答案 1 :(得分:1)
尝试这样的事情:
clients.Projects.Where(
p => p.id == projectID
&& p.name == statusProjectName.Text);
答案 2 :(得分:1)
您可以使用以下内容替换foreach查找:
var project = client.Projects.Where(p=>p.id==projectID).SingleOrDefault();
if (project != null) statusProjectName.Text = project.name;