无法将类型 'IEnumerable<int> 隐式转换为 'int'

Sma*_*ac 0 c# linq

我从 Linq 查询中选择一个 id,因此它是一个 int,但是当我尝试再次使用它时,它给了我错误:

无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“int”

var costcentre = company.CompanyCostCentres
    .Where(cc => cc.Name.ToLower() == CostCentre.ToLower())
    .Select(cid => cid.CompanyCostCentreId)
    .ToList();

if (costcentre != null)
{
    person.PersonInCompanyCostCentres.Add(new Core.Data.PersonInCompanyCostCentre    
    { 
        CompanyCostCentreId = costcentre, 
        UserId = person.UserId, 
        CompanyId = company.CompanyId, 
        RecordCreated = DateTime.Now, 
        RecordModified = DateTime.Now 
    });
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*rno 5

问题:

var costcentre = company.CompanyCostCentres.Where(cc => cc.Name.ToLower() == 
CostCentre.ToLower()).Select(cid => cid.CompanyCostCentreId).ToList();
Run Code Online (Sandbox Code Playgroud)

返回一个列表。

CompanyCostCentreId = costcentre
Run Code Online (Sandbox Code Playgroud)

尝试将列表分配给 int

解决方案:

如果cid.CompanyCostCentreIdint

改变

var costcentre = company.CompanyCostCentres.Where(cc => cc.Name.ToLower() == 
CostCentre.ToLower()).Select(cid => cid.CompanyCostCentreId).ToList();
Run Code Online (Sandbox Code Playgroud)

var costcentre = company.CompanyCostCentres.Where(cc => cc.Name.ToLower() == 
CostCentre.ToLower()).Select(cid => cid.CompanyCostCentreId).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

那么你应该处理如果没有给出结果则 costcenter 变为 0 的可能性。