无法隐式转换类型&#39; IEnumerable <int>到&#39; int&#39;

时间:2017-11-08 11:10:14

标签: c# linq

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

  

无法隐式转换类型   &#39; System.Collections.Generic.IEnumerable to&#39; int&#39;

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 
    });
}

3 个答案:

答案 0 :(得分:3)

要从id列表中获取第一个int,请使用

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

int costcentre= costcentres.FirstOrDefault();

答案 1 :(得分:2)

您的costcentre变量是一个列表。您可以使用public方法代替.FirstOrDefault(predicate)来挑选单个项目。

见下文:

.Where(predicate)

我只是更改了Where to FirstOrDefault并删除了.Select()和.ToList()

答案 2 :(得分:0)

<强>问题:

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

返回一个列表。

CompanyCostCentreId = costcentre

尝试将列表分配给int

<强>解决方案:

如果cid.CompanyCostCentreIdint

变化

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

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

然后,如果没有给出结果,您应该处理costcentre变为0的可能性。