如何从匹配条件的行集中获取不同的值

时间:2018-12-13 10:32:17

标签: c# asp.net-core-2.1 ef-core-2.1

我有一张具有以下性质的表。

DataSource

我希望使用Entity Framework获得与Json不同的+----+-----------+-----------+------+---------+------+ | Id | AccountId | ProjectId | Year | Quarter | Data | +----+-----------+-----------+------+---------+------+ | 39 | 163 | 60 | 2019 | 2 | 0 | | 40 | 163 | 60 | 2019 | 2 | 8 | | 41 | 163 | 61 | 2019 | 2 | 1 | | 42 | 163 | 61 | 2019 | 2 | 2 | +----+-----------+-----------+------+---------+------+ ,到目前为止,我的代码看起来像这样。

ProjectIds

当我使用参数击中此端点时, // GET: api/Insight/163/2019/2 [HttpGet("{accid}/{year}/{qurter}")] public async Task<IActionResult> GetSurveys([FromRoute] long accid, [FromRoute] long year, [FromRoute] long qurter) { //This code gives me the error. return await _context.CustomerSatisfactionResults.Select(x=>x.ProjectId) .Where(x => x.AccountId == accid && x.Year == year && x.Quarter == qurter).ToListAsync(); } 我希望Json响应为

/163/2019/2

但是出现以下错误。 enter image description here 我做错了什么?

1 个答案:

答案 0 :(得分:1)

出现错误的原因是因为您对仅包含Where的投影序列应用了ProjectId条件。您应在Where之前使用Select

要获取不同的值,请使用Enumerable.Distinct方法:

return await _context.CustomerSatisfactionResults
   .Where(x => x.AccountId == accid && x.Year == year && x.Quarter == qurter)
   .Select(x => x.ProjectId)
   .Distinct()
   .ToListAsync();