Linq к юридическим лицам не работает - PullRequest
0 голосов
/ 24 мая 2011

Есть идеи, почему следующий код не скомпилируется?

IEnumerable users;
using (var ent = new GatekeeperEntities())
{
    users = from t1 in ent.Users
            join t2 in ent.UserStatus1 on t1.ID equals t2.UserId
            where t2.ExpirationDateTime != null
            select new {t1.ID, t1.Name, t1.UserName, t2.Status };
    }

foreach (var user in users)
{
    user.ID; // Cannot resolve symbol ID
}

Ответы [ 5 ]

1 голос
/ 24 мая 2011

Содержимое IEnumerable относится к типу System.Object. Вместо него необходимо использовать ключевое слово var, чтобы компилятор определил, что пользователи имеют тип IEnumerable<T> для некоторого анонимного типа T. Если вы хотите использоватьанонимный тип, перебирать элементы внутри области применения блока.

1 голос
/ 24 мая 2011

Перестройте ваш код, как показано ниже.

using (var ent = new GatekeeperEntities())
{
    var users = from t1 in ent.Users
        join t2 in ent.UserStatus1 on t1.ID equals t2.UserId
        where t2.ExpirationDateTime != null
        select new {t1.ID, t1.Name, t1.UserName, t2.Status };

    foreach (var user in users)
    {
        user.ID;
    }
}
0 голосов
/ 24 мая 2011

И помните: то, что вы обычно выполняете с помощью объединений в SQL, может быть просто сделано путем перемещения по отношениям в EF:

users = from t2 in ent.UserStatus.Include("User") 
where t2.ExpirationDateTime != null
select t2

Это дает вам UserStatus es, которые вы хотите, и вы можете получитьUser каждого UserStatus через свойство User, которое точно определено в вашей модели.

0 голосов
/ 24 мая 2011

Попробуйте привести ваш пользовательский объект в цикле.

foreach (var user in users)   
{
    ((User)user).ID;
}
0 голосов
/ 24 мая 2011
  user.Id; <-----Cannot resolve symbol ID

Согласно вашему коду это должно быть user.ID (верхний регистр, а не нижний регистр) - капитализация имеет значение.

Также у вас есть user, объявленный как IEnumerable - так что вы не будетеполучить любые свойства того типа, который есть на самом деле, только свойства, доступные в IEnumerable - объявите его как var и используйте его внутри оператора using, или создайте класс вместо использования анонимного типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...