2016-02-21 5 views
1

Я получаю эту ошибку: Не удается преобразовать из„Int“в„System.Predicate ServerHomeWork.Models.Organisation“не удается преобразовать из «Int» в «System.Predicate

В части линии OrgList. Добавить (Organisation.Find (UTO.OrganisationId); свойство UTO.OrganisationId является ИНТ, но все же он говорит что-то не так Может кто-нибудь сказать мне, что происходит не так здесь

код здесь:

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

} 
+0

Арен 't вы пропускаете закрытие ')' там? – Idos

+0

Да, жаль, что так и сделал. Но послание визуальной студии дает то же самое. – StuiterSlurf

ответ

1

Find берет предикат в качестве параметра. Все, что вы поставляете, это int.

Попробуйте следующее:

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

Спасибо, что сделал трюк. Но что такое предикат? – StuiterSlurf

+0

http://stackoverflow.com/questions/1710301/what-is-a-predicate-in-c – kskyriacou

0

Проблема заключается в вашем лямбда-выражения в OrgList.Add(Organisation.Find(UTO.OrganisationId));

Вы хотите сделать что-то вроде OrgList.Add(Organisation.Find(item => item.OrganisationId == UTO.OrganisationId));

Для получения дополнительной информации: List(T).Find at MSDN

Смежные вопросы