如何使用DbContext设置此查询

时间:2012-10-04 21:42:29

标签: c# entity-framework datacontext

我在SQL Server中有两个表用于客户及其地址。

CREATE TABLE Customers
(
    ID              INT NOT NULL IDENTITY(1,1),
    LastName        VARCHAR(50) NOT NULL,
    FirstName       VARCHAR(50) NOT NULL,
    DateOfBirth     DATETIME2 NOT NULL,
    CONSTRAINT [PK_Customers] PRIMARY KEY CLUSTERED ([ID] ASC)
)
CREATE TABLE CustomerAddresses
(
    ID              INT NOT NULL IDENTITY(1,1),
    CustomerID      INT NOT NULL CONSTRAINT [FK_CustomerAddresses_Customers] FOREIGN KEY([CustomerID]) REFERENCES [dbo].[Customers] ([ID]),
    Street          VARCHAR(100) NOT NULL,
    City            VARCHAR(50) NOT NULL,
    Country         VARCHAR(50) NOT NULL,
    CONSTRAINT [PK_CustomerAddresses] PRIMARY KEY CLUSTERED ([ID] ASC)
)

我已经生成了一个EFdatamodel并使用DataContext连接到它。我正在努力争取特定国家的所有客户。我的代码如下。

static List<Customer> GetByCountry(string country)  
        {  
            MyDbContext MyContext = new MyDbContext ();  
            return MyContext.Customers.Where(x => x.CustomerAddresses.Where( y => y.Country == country)).ToList();  
        }  

但是我遇到了编译错误。

  

无法隐式转换类型   'System.Collections.Generic.IEnumerable'到   'bool'无法将lambda表达式转换为委托类型   'System.Func'因为有些回归   块中的类型不可隐式转换为委托   返回类型

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

您的代码必须

return MyContext.Customers.Where(x => x.CustomerAddresses.Any( y => y.Country == country)).ToList();

因为您想要返回具有指定国家/地区的任何地址的所有客户。 Where()期望一个函数返回条件是否为true,并返回保持此条件为true的所有元素的枚举。在你的外部Where()你的供应一个IEnumerable类型的参数(这是你的内部的返回值),这是错误的。