0

SQL Serverには、顧客とそのアドレス用の2つのテーブルがあります。

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'に暗黙的に変換できません。ブロック内の一部の戻り型がデリゲート戻り型に暗黙的に変換できないため、ラムダ式をデリゲート型'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 に答える