簡體   English   中英

返回2列,Id和count,從EF作為Dictionary <int,int>

[英]Return 2 columns, Id and count, from EF as Dictionary<int,int>

我在兩個表之間有一個FK關系,但是為了這個查詢的目的,我需要得到每個FK的行數。

例如,我有CareTaker表和CareTakerId作為PK; CareTakerId作為FK的Animal表。 鑒於CareTakerIds列表,我想要每個看護者負責的所有AnimalIds。 像這樣的東西:

select CareTakerId, count(1) 
from Animal
where CareTakerId in (1,2,3,4)
    and AnimalTypeId = 3
group by CareTakerId

哪個回報

CareTakerId | No ColumnName
1           | 42
2           | 6

我如何在EntityFramework中執行此操作? 我需要這個結果,所以我想我會把它作為一個Dictionary<int,int>Dictionary<CareTakerId,Count> ) - 但我無法弄清楚如何為它編寫EF查詢..這就是我所擁有的遠:

query
    .Where(r => r.AnimalTypeId == animalTypeId 
             && careTakerIds.Contains(r => r.CareTakerId))
    .GroupBy(r => r.CareTakerId)
    // Not sure what to write here; r.CareTakerId doesn't exist
    .Select(r => new {r.key, r.value }) 
    .ToDictionary(kvp => kvp.Key, kvp => kvp.value);

如何在實體框架中選擇CareTakerId和count(1)?

在您的Select執行此操作:

//...
//You have groups here, 
//so you can call Count extension method to get how many elements belong to the current group
.Select(g => new {CareTakerId=g.Key,Count= g.Count() })
.ToDictionary(e=> e.CareTakerId,e=> e.Count);

你非常接近,只需添加“Count()”方法。

query
    .Where(r => r.AnimalTypeId == animalTypeId 
             && careTakerIds.Contains(r => r.CareTakerId))
    .GroupBy(r => r.CareTakerId)
    .Select(r => new {r.key, value = r.Count() }) 
    .ToDictionary(kvp => kvp.Key, kvp => kvp.value);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM