2016-01-22 190 views
0

我有以下數據庫: enter image description here使用LINQ搜索關係數據庫

和下面的代碼:

public IActionResult Index(IssueModel searchCriteria) 
{ 
    var bloods = from m in _context.Blood 
       select m; 
    if (!string.IsNullOrEmpty(searchCriteria.SearchComponent)) 
    { 
     //Blood Component 
     bloods = bloods.Where(s => s.Component.Contains(searchCriteria.SearchComponent)); 
     //Blood Type : This is where I plan to search for a specific blood type. 
    } 
    return View(bloods); 
} 

正如你所看到的,我很高興來搜索數據庫血液在一定組件類型。在我標記的區域中,我想搜索與特定PlasType或RedBloodType相關的血液。

任何想法?謝謝!

編輯:感謝所有提供了答案的人。我所看到的所有答案都非常有用,不僅幫助我破解這個問題,還提高了我對該主題的理解。

+6

你'return'聲明忽略'bloods'是無益的事實......但此外,你還沒有真正問了一個問題呢。你究竟在幹什麼? –

+0

您可以繼續查詢。鑑於'blood.DonorId',你可以找到符合你的'PlasmaType'和'RedBloodType'標準的'Donor'。然後,返回查詢結果,而不是原始的'_context.Blood.List' – Ian

回答

1

我只想創建簡單的SQL查詢,然後將其轉換爲LINQ查詢。

Select distinct blood.* from blood 
inner join donor on blood.donorid = donor.donorid 
where donor.PlasType like 'param' or RedBloodType like 'param' 

現在將它轉換爲LINQ查詢

var filteredBlood = (from b in blood 
         join d in donor on b.DonorId equals d.DonorId 
         where d.PlasType.contains("param") || d.RedBloodType.contains("param") 
         select b).distinct().toList(); 
1

喜歡這個:???

result = new List<Blood>(); 

    foreach (var b in bloods) 
    { 
     if (_context.Donor.Where(d => d.id == b.BloodId) 
         .Any(d => (d.PlasType == "somethingsYouNow") || (d.RedBloodType == "somethingsYouNow")) 
     { 
     result.Add(b) 
     } 
    } 


    return result; 
1

你不具備導航屬性像Blood.Donors(如果它是一對多的關係)?您可以通過此屬性訪問到它,但你越早應該包括它:

Blood.Include(c => c.Donors);