C# Linq到Sql-从1:Many中选择
我刚开始使用Linq,刚刚开始了一个辅助项目来学习一些基础知识。我目前正在使用LINQtoSQL,我所有的DB表关系都工作得很好。目前我有一个客户表和一个项目表。每个客户机可以有一个或多个项目。因此,正如您所期望的,在Linq发挥其魔力之后,每个客户机对象都有一个项目对象集合 我正在使用下面的代码,它工作得很好,但我认为有更好的方法。我需要向我的方法传递一个ProjectID,然后从客户端选择该项目:C# Linq到Sql-从1:Many中选择,c#,asp.net,linq-to-sql,C#,Asp.net,Linq To Sql,我刚开始使用Linq,刚刚开始了一个辅助项目来学习一些基础知识。我目前正在使用LINQtoSQL,我所有的DB表关系都工作得很好。目前我有一个客户表和一个项目表。每个客户机可以有一个或多个项目。因此,正如您所期望的,在Linq发挥其魔力之后,每个客户机对象都有一个项目对象集合 我正在使用下面的代码,它工作得很好,但我认为有更好的方法。我需要向我的方法传递一个ProjectID,然后从客户端选择该项目: private void PopulateStatusView(int project
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
}
}
有人能告诉我是否有更好的解决方案,而不是在每个项目上循环吗
谢谢。要获取具有特定项目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();
要获取具有特定项目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();
试着这样做:
clients.Projects.Where(
p => p.id == projectID
&& p.name == statusProjectName.Text);
试着这样做:
clients.Projects.Where(
p => p.id == projectID
&& p.name == statusProjectName.Text);
您可以将foreach查找替换为以下内容:
var project = client.Projects.Where(p=>p.id==projectID).SingleOrDefault();
if (project != null) statusProjectName.Text = project.name;
您可以将foreach查找替换为以下内容:
var project = client.Projects.Where(p=>p.id==projectID).SingleOrDefault();
if (project != null) statusProjectName.Text = project.name;
谢谢,我应该注意到我正在将statusProjectName的文本设置为项目名称,但您的方法仍然解决了问题。谢谢,我应该注意到我正在将statusProjectName的文本设置为项目名称,但您的方法仍然解决了问题。谢谢,这是最简洁的方法。使用Projects.Any和Projects.Where之间有很大区别吗?在这种情况下,Any返回一个布尔值来指示是否存在这样的项目ID。Where返回满足该ID的项目。“Any(x)”在语义上类似于“Where(x).Count()>0”。谢谢,这是最简洁的。使用Projects.Any和Projects.Where之间有很大区别吗?在这种情况下,Any返回一个布尔值来指示是否存在这样的项目ID。其中返回满足该ID的项目。“Any(x)”在语义上类似于“Where(x).Count()>0”