我在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'因为有些回归 块中的类型不可隐式转换为委托 返回类型
我在这里做错了什么?
答案 0 :(得分:1)
您的代码必须
return MyContext.Customers.Where(x => x.CustomerAddresses.Any( y => y.Country == country)).ToList();
因为您想要返回具有指定国家/地区的任何地址的所有客户。 Where()期望一个函数返回条件是否为true,并返回保持此条件为true的所有元素的枚举。在你的外部Where()你的供应一个IEnumerable类型的参数(这是你的内部的返回值),这是错误的。