我想查询我的数据库,我正在通过与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,可以进行更高性能的查询,并且不从数据库中检索重复和不需要的记录。