0

我在 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”,因为块中的某些返回类型不能隐式转换为委托返回类型

我在这里做错了什么?

4

1 回答 1

1

您的代码必须是

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

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

于 2012-10-04T22:09:11.563 回答