Сравнение внешних ключей в рамках структуры 3.5 - PullRequest
0 голосов
/ 16 марта 2011

У меня есть организационная таблица со следующей структурой

[dbo].[Organizations](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NOT NULL,
[Phone] [nvarchar](13) NULL,
[Fax] [nchar](11) NULL,
[Address] [nvarchar](100) NULL,
[URL] [varchar](50) NULL,
[Email] [nvarchar](50) NULL,
[EstablishedYear] [nchar](4) NULL,
[CategoryId] [int] NULL,
[RegionId] [int] NULL,
[CityId] [int] NULL,
[ProvinceId] [int] NULL,
[CountryId] [int] NULL,
[ImageFileName] [nvarchar](50) NULL)

потому что я использую Entity Framework 3.5, Я использовал частичный класс для добавления свойств внешнего ключа (для countryid, Provinceid, ...)

  public partial class Organization
{
    public int? CountryId
    {
        get
        {
            if (CountryReference.EntityKey == null)
                return null;
            return (int)CountryReference.EntityKey.EntityKeyValues[0].Value;
        }
        set
        {
            if (value != null && value != -1)
                CountryReference.EntityKey = new EntityKey("Entities.Countries", "CountryId", value);
            else
                CountryReference.EntityKey = null;
        }
    }

}

Теперь у меня есть запрос, но он выдает исключение:

Запрос:

  if (Enumerable.Any(ctx.Organizations.Where(s => s.CountryId==  Organization.CountryId && s.ProvinceId == Organization.ProvinceId && s.CityId == Organization.CityId && s.Name == Organization.Name)))

Исключение:

The specified type member 'CountryId' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.

Я просто хочу сравнить свойства навигации, есть идеи?

Ответы [ 2 ]

2 голосов
/ 16 марта 2011

Вы не можете использовать свойства, определенные в частичном классе в запросе linq-to-entity.Вы должны использовать свойство навигации напрямую:

ctx.Organizations.Where(o => o.Country.Id == someCountryId);
0 голосов
/ 18 марта 2011

я нашел решение:

 if (Enumerable.Any(ctx.Organizations.AsEnumerable().
         Where(s => s.CountryId == Organization.CountryId && 
                    s.ProvinceId == Organization.ProvinceId && 
                    s.CityId == Organization.CityId && 
                    s.Name == Organization.Name)))

перед использованием условия where я использовал метод AsEnumerable ().

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