Linq 比较实体框架3.5中的外键

Linq 比较实体框架3.5中的外键,linq,entity-framework,linq-to-entities,Linq,Entity Framework,Linq To Entities,我有一个具有以下结构的组织表 [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, [Esta

我有一个具有以下结构的组织表

[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)
因为我使用的是实体框架3.5, 我使用了分部类来添加外键属性(对于countryid、provinceid等)

}

现在我有一个查询,但它引发了一个异常:

查询:

  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.

我只是想比较导航属性,有什么想法吗?

在linq to entities查询中,不能使用分部类中定义的属性。您必须直接使用导航属性:

ctx.Organizations.Where(o => o.Country.Id == someCountryId);
我找到了解决办法:

 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条件之前,我使用了一个numerable()方法。

对于您的回答,有时Country为null,我应该在访问Country.id之前检查它,这是一个大量的编码,有更好的解决方案吗?您不需要在linq to entities查询中检查它。当国家为null时,它会引发null引用异常。我如何在where linq METHORY中使用自定义函数?@r.zarei:编写此代码时,不会引发null引用异常。您如何使用它?-1这将从数据库加载整个
组织
表-@Ladislav Mrnka的解决方案是正确的。
 if (Enumerable.Any(ctx.Organizations.AsEnumerable().
         Where(s => s.CountryId == Organization.CountryId && 
                    s.ProvinceId == Organization.ProvinceId && 
                    s.CityId == Organization.CityId && 
                    s.Name == Organization.Name)))