2017-04-05 57 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(); 
相關問題