C# 无法从“int”转换为“System.Predicate”
我遇到以下错误:无法从“int”转换为“System.Predicate ServerHomeship.Models.Organization” 在OrgList.AddOrganization.FindUTO.OrganizationID行的一部分; 属性UTO.organizationId是一个int,但它仍然表示有问题。有人能告诉我这里出了什么问题吗 代码在这里:C# 无法从“int”转换为“System.Predicate”,c#,entity-framework,linq,C#,Entity Framework,Linq,我遇到以下错误:无法从“int”转换为“System.Predicate ServerHomeship.Models.Organization” 在OrgList.AddOrganization.FindUTO.OrganizationID行的一部分; 属性UTO.organizationId是一个int,但它仍然表示有问题。有人能告诉我这里出了什么问题吗 代码在这里: public virtual List<Organisation> Organisation { get
public virtual List<Organisation> Organisation
{
get
{
List<UsersToOrganisations> UserToOrg = UsersToOrganisations.FindListOfOrganisations(UserId);
List<Organisation> OrgList = new List<Models.Organisation>();
if (UserToOrg.Count > 0)
foreach (UsersToOrganisations UTO in UserToOrg)
OrgList.Add(Organisation.Find(UTO.OrganisationId));
else
OrgList.Add(new Organisation("No organisation was found.", 0));
return OrgList;
}
}
这是UserToOrganization类
class UsersToOrganisations
{
public int Id { get; set; }
public int UserId { get; set; }
public int OrganisationId { get; set; }
public bool MainOrganisation { get; set; }
/// <summary>
/// Constructor for entity framework
/// </summary>
public UsersToOrganisations() { }
/// <summary>
/// Constructor for creation
/// </summary>
/// <param name="UserId"></param>
/// <param name="OrganisationId"></param>
public UsersToOrganisations(int UserId, int OrganisationId, bool MainOrganisation)
{
this.UserId = UserId;
this.OrganisationId = OrganisationId;
this.MainOrganisation = MainOrganisation;
}
public class UsersToOrganisationsContext : DbContext
{
public DbSet<UsersToOrganisations> UserToOrganisation { get; set; }
}
/// <summary>
/// Get the list of organisations of a single user
/// </summary>
/// <param name="UserId"></param>
/// <returns></returns>
public static List<UsersToOrganisations> FindListOfOrganisations(int UserId)
{
using (var context = new UsersToOrganisationsContext())
{
var organisation = (from uto in context.UserToOrganisation
where uto.UserId == UserId
select uto);
return organisation.ToList();
}
}
/// <summary>
/// Get the main organisation of a user
/// </summary>
/// <param name="UserId"></param>
/// <returns></returns>
public static UsersToOrganisations FindMainOrganisation(int UserId)
{
using (var context = new UsersToOrganisationsContext())
{
var UserToOrganisation = context.UserToOrganisation
.Where(uto => uto.UserId == UserId && uto.MainOrganisation == true)
.SingleOrDefault();
return UserToOrganisation;
}
}
}
Find将谓词作为参数。您提供的只是一个int
请尝试以下操作:
OrgList.Add(Organisation.Find(u => u.OrganisationId == UTO.OrganisationId));
问题在于中的lambda表达式 OrgList.addorganization.FindUTO.organizationId 你想做点什么 OrgList.AddOrganization.Finditem=>item.OrganizationId==UTO.OrganizationId
有关详细信息:我发现此问题是因为我使用的是List.Find而不是List.Contains。切换到using List.Contains将只处理int,因此不需要谓词。您是否缺少结束符?是的,很抱歉,我遗漏了。但是VisualStudio给出的信息仍然是一样的。