2012-07-03 82 views
1

无法得到这个,有人可以帮助这个LINQ查询吗?LINQ帮助新手

select col1, 
(select col2 from tbl2 where tbl2.ID=tbl1.tbl2ID) as [col2] 
from tbl1 

的情况是这样的

我想从作业表中的所有记录,乔布斯扇区列,我也想SectorName。它也有CountryID和CityID,我也需要CountryName和CityName。

+0

你的数据上下文是什么样的?数据模式对于Jobs表和其他表(Sector?)是什么样的? – ledgeJumper

+0

结构很简单。 Jobs表有几个字段和SectorID(int),扇区表有SectorName(nvarchar)和ID(int,primarykey),Cities表有CityName(nvarchar)和ID(int,primarykey),Countries表有CountryName(nvarchar)和ID (int,primarykey) –

+0

我根据你解释的三张表更新了我的答案。 – ledgeJumper

回答

0

你需要做一些加盟。不知道你的结构,像下面这样的东西可能会起作用。

创建一个简单的视图模型来保存您的信息:

public class JobView 
{ 
    public int JobId { get; set; } 
    public string JobName { get; set; } 
    //Add any other fields you may need here 
    public string SectorName { get; set; } 
    public string CityName { get; set; } 
    public string CountryName { get; set; } 
    public string CityName { get; set; } 

} 

然后根据你所需要的

List<JobView> retVal = (from job in Jobs 
       join sector in Sectors on job.SectorId equals sector.Id 
       join country in Countries on job.CountryId equals country.Id 
       join city in Cities on job.CityId equals city.Id 
       select new JobView { 
           JobId = job.Id, 
           JobName = job.JobName, 
           SectorName = sector.SectorName, 
           CountryName = country.CountryName, 
           CityName = city.CityName }).ToList(); 
    } 

在工作视图定义的任何附加字段只需要在要填充填充列表选择。

+0

结构简单。 Jobs表有几个字段和SectorID(int),扇区表有SectorName(nvarchar)和ID(int,primarykey),Cities表有CityName(nvarchar)和ID(int,primarykey),Countries表有CountryName(nvarchar)和ID (int,primarykey) –

+0

根据您收到的众多答案,您应该顺利完成任务。如果您需要ORM更优雅的解决方案,则可能需要扩展您的问题。基于你的问题,我会建议使用某种形式的ViewModel,它包含你需要的所有列,并简单地按照上面的建议创建一个实例。 –

+0

这最适合我的场景..谢谢@J托雷斯 –

0

你应该JOIN这些表是这样的:

from j in Jobs 
join c in Countries on j.CountryID equals c.ID 
join c2 in Cities on c.CityID equals c2.ID 
select new 
{ 
    SectorName = j.SectorName, 
    CountryName = c.Name, 
    CityName = c2.Name 
}; 
+0

我还需要乔布斯和您添加的3列。 –

+0

@OjalSuthar,你可以选择你想要选择的东西,就像我给你展示的那样,'j'是'jobs'表的别名,用它来选择你想要的匿名类型的列'select new {j.Whatyouwanttoselect ,j.anothercolumn,...}。 –

1

如果关系设置正确,我想应该是这样的:

var result=from job in Jobs 
      select new {job.jobID, job.jobName, job.Sector.SectorName, job.Country.CountryName, job.City.CityName}; 
0

这里是一个很好的示例中,我发现我想解释你在找什么。绝对需要一个JOIN。

class Job 
{ 
public int ID { get; set; } 
public string Name { get; set; } 
public string Title { get; set; } 
} 

class Sector 
{ 
public int ID { get; set; } 
public string SectorName { get; set; } 
} 

class City 
{ 
public int ID { get; set; } 
public string CityName { get; set; } 
} 

void Main() 
{ 
var jobs = new Job[] 
{ 
    new Job{ID = 5, Name = "Sam", Title="Minion"}, 
    new Job{ID = 6, Name = "Dave", Title="Overlord"}, 
    new Job{ID = 7, Name = "Julia", Title="Minion"}, 
    new Job{ID = 8, Name = "Sue", Title="Minion"} 
}; 

// Example orders. 
var sectors = new Sector[] 
{ 
    new Sector{ID = 5, SectorName = "Sector42"} 
}; 

var cities = new City[] 
{ 
    new City{ID = 5, CityName = "TownsVille"} 
}; 

// Join on the ID properties. 
var query = from j in jobs 
     join s in sectors on j.ID equals s.ID 
     join c in cities on j.ID equals c.ID 
     select new { j.Name, j.Title, c.CityName, s.SectorName }; 

// Display joined groups. 
foreach (var group in query) 
{ 
    Console.WriteLine("{0} Is a {1} in {2}, sector {3}", group.Name, group.Title, group.CityName, group.SectorName); 
} 

} 

输出看起来像这样(从foreach循环)

Sam Is a Minion in TownsVille, sector Sector42 

我引用这个网站:http://www.dotnetperls.com/join