【问题标题】:Cannot convert from 'int' to 'System.Predicate无法从“int”转换为“System.Predicate”
【发布时间】:2016-06-02 20:06:17
【问题描述】:

我收到此错误:无法从“int”转换为“System.Predicate ServerHomeWork.Models.Organisation”

在 OrgList.Add(Organisation.Find(UTO.OrganisationId); 行的一部分 属性 UTO.OrganisationId 是一个 int 但它仍然说有问题。谁能告诉我这里出了什么问题?

代码在这里:

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

这是 UserToOrganisation 类

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

}

【问题讨论】:

  • 你是不是错过了一个结束)那里?
  • 是的,对不起。但是visual studio给出的信息还是一样的。

标签: c# entity-framework linq


【解决方案1】:

Find 将谓词作为参数。您提供的只是一个 int。

尝试以下方法:

OrgList.Add(Organisation.Find(u => u.OrganisationId == UTO.OrganisationId));

【讨论】:

    【解决方案2】:

    我发现这个问题是因为我使用的是List.Find() 而不是List.Contains()。切换到使用List.Contains() 将只使用int,因此不需要谓词。

    【讨论】:

      【解决方案3】:

      问题出在你的 lambda 表达式中 OrgList.Add(Organisation.Find(UTO.OrganisationId));

      你想做类似的事情 OrgList.Add(Organisation.Find(item =&gt; item.OrganisationId == UTO.OrganisationId));

      欲了解更多信息:List(T).Find at MSDN

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-20
        • 2013-02-28
        • 2014-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多