LINQ。从第二个表返回匹配记录。

时间:2017-04-05 07:29:15

标签: c# asp.net 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;}
}

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

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

上面的代码为我提供了特定用户的DistrictId。我希望它与区表匹配并返回区域名称。我被困在这里。

等效的SQL Query就是这样的。

select U.DistrictId,D.DistrictName,userId from UserDistricts U 
INNER JOIN Districts D on D.DistrictId=U.DistrictId 
where userId=@UID   

非常感谢任何帮助。

3 个答案:

答案 0 :(得分: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仅允许比较相等。

答案 1 :(得分:0)

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

timer1.Elapsed += new ElapsedEventHandler(await timer1_tick);

async Task<void> timer1_tick()
{
//Do your download, upload, etc.
}

希望它有所帮助。

答案 2 :(得分:0)

在类之间创建虚拟关系,我们可以借助导航属性

轻松实现它
class UserDistricts{
 public int id{get;set;}
 public Users Userid{get;set;}
 public Districts DistrictId{get;set;}
}

然后创建一个类似

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

之后,您可以将此类型添加到列表中,如下所示

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();