我是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
非常感谢任何帮助。
答案 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;}
}
然后创建一个类似
的ViewModelclass 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();