2017-04-05 80 views
0

我是LINQ的新手。我有以下三个数据库表。LINQ。从第二张表中返回匹配记录。

class Districts{ 
    public int id{get;set;} 
    public String DistrictName{get;set;} 
} 

class Users{ 
public int id{get;set;} 
public String Username{get;set;} 
//etc 
} 

而且连接表

class UserDistricts{ 
public int id{get;set;} 
public int Userid{get;set;} 
public int DistrictId{get;set;} 
} 

我想找到分配给它的用户ID标识的特定用户的DistrictNames。

List<int> districtsAssigned = (from aDistrict in p.UserDistricts where 
aDistrict.UserId == userId select aDistrict.DistrictId).ToList(); 

上面的代码给了我一个特定用户的DistrictId。我希望它与地区表匹配并返回地区名称。我被困在这里。

等价的SQL查询会是这样的。

select U.DistrictId,D.DistrictName,userId from UserDistricts U 
INNER JOIN Districts D on D.DistrictId=U.DistrictId 
where [email protected] 

任何帮助将不胜感激。

+0

请尝试使用SO Linq的[Joins]文档(http:// stackoverfl ow.com/documentation/c%23/68/linq-queries/2994/joins-inner-left-right-cross-and-full-outer-joins#t=201704050730121811661) –

+0

为什么你有这张桌子? UserDistricts?它与区和用户是多对多的关系吗?如果是这样的话,你不需要在UserDistricts中使用'public int id {get; set;}',只有左键和右键 – Valkyrie

+0

也告诉我你在使用LINQ to SQL吗?或实体框架/ LINQ2Entities? – Valkyrie

回答

0

有一个在LINQ一个join,太:

from userDistrict in p.UserDistricts 
join district in p.Districts on userDistrict.DistrictId equals district.id 
where userDistrict.UserId == userId 
select district.DistrictName 

联接不经常使用的LINQ,因为还有其他的,更灵活的选择。在这种情况下,这将是:

from userDistrict in p.UserDistricts 
from district in p.Districts 
where (userDistrict.DistrictId == district.id) && (userDistrict.UserId == userId) 
select district.DistrictName 

这使得复杂的连接条件,而join只允许相等比较。

+0

谢谢你的工作。 –

0

我认为它会使用基于语法的查询会更容易:

var entryPoint = (from U in Users 
       join ud in UserDistricts on U.UserID equal ud.UserID 
       join d in Districts on d.DistrictID equals ud.DistrictID 
       where ud.UserID == U.UserID 
       select new { 
        DistrictId = ud.DistrictId, 
        DistrictName= d.DistrictName, 
        UserID= U.UserID 
       }).ToList(); 

希望它能帮助。

+0

这不会编译,因为语法不正确。 – Sefe

0

创建类之间的虚拟关系,我们可以与导航性能的帮助

class UserDistricts{ 
public int id{get;set;} 
public Users Userid{get;set;} 
public Districts DistrictId{get;set;} 
} 

然后创建一个视图模型像

class DistrictDetails{ 
    public int userId {get;set;} 
    public string DistrictName{get;set;} 
    public int DistrictId{get;set;} 
} 

在此之后,你可以将此类型添加到容易achive它列表如下

List<DistrictDetails> districtsAssigned = _context.UserDistricts 
    .Where(x=>x.Userid == userId) 
    .Select(y=> new DistrictDetails 
     { 
      DistrictId==y.Districts.DistrictId, 
      DistrictName=y.Districts.DistrictName, 
      userId == y.d 
     }).ToList(); 
相关问题