如何区分EF Core 6中的重复行与方法语法?



我想查询我的数据库,我正在通过与LcNoListId分组来搜索合约id。可以在LcNoListId列中包含与合约id对应的重复值。此时,我需要区分所有重复的LcNoListId,并需要返回没有重复的记录。

我尝试了下面的函数来返回LcNoListId列中没有重复值的行。但是Distinct()函数不工作。

[HttpGet("contract-no/{id}")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public IActionResult Get(int id)
{
    try
    {
        IEnumerable<BTBPending> objBTBPendingList = _unitOfWork.BTBPending.GetAll(includeProperties: "ProformaInvoice,ContractList,SupplierList,CountryList,ItemList,BuyerList,StyleList,TradeTermList,ErpRemarksList,StatusList,LcNoList,UdAmendList");
            
        var query = objBTBPendingList
                .Where(x => x.ContractListId == id && x.UdAmendList == null)
                .GroupBy(c => c.LcNoListId)
                .Where(grp => grp.Distinct().Count() > 1);
        // var que = Company.Distinct();
        return Ok(query);
    }
    catch (Exception ex)
    {
        _logger.LogError(ex, $"Something went wrong in the {nameof(Get)}");
        return StatusCode(500, "Internal Server Error, Please Try Again Leter!");
   }
}

此函数返回LcNoListId列中包含重复值的所有行。但是我不需要任何重复的值在LcNoListId列。

很明显,这个Distinct()函数在这个上下文中不起作用。请帮我找一个解决办法。

使用以下查询:

var query = objBTBPendingList
    .Where(x => x.ContractListId == id && x.UdAmendList == null)
    .GroupBy(c => c.LcNoListId)
    .Select(grp => grp.First());

但是看起来您一直在使用无效的存储库模式实现。使用纯EF Core,可以进行更高性能的查询,并且不从数据库中检索重复和不需要的记录。

相关内容

  • 没有找到相关文章

最新更新