1

2つのテーブル(クライアントと電子メール)があります。1つはメインの電子メールアドレスを含む顧客のデータを含み、もう1つは追加の電子メールアドレスを含みます。

クライアントまたは電子メールテーブルにあるかどうかに関係なく、多くの電子メールアドレスの1つからユーザーを検証する必要があります。私はうまく機能するこのSQL文を思いついた:

set @email = 'client@domain.com';
select c1.credits > 0 as Allowed, c1.Email as MainEmail from 
customers c1 inner join (select ClientId,  Email FROM customers WHERE 
Email=@email union all select ClientId, Email FROM emails WHERE Email=@email) e1 
on c1.ClientId = e1.ClientId;

メソッドベースの構文を使用して、このクエリをLINQ to Entitiesに書き込む方法は?

4

1 に答える 1

1

私が正しく理解していれば、

顧客は、テーブルに電子メール(追加)を持っている場合と持っていない場合がありemailsます。また、顧客はテーブルに複数の追加の電子メールエントリを持っていemailsます。以下のように

List<Customer> customers = new List<Customer> 
{ 
    new Customer { ClientId = 1, Email = "client1@domain.com", Credits = 2 },
    new Customer { ClientId = 2, Email = "client2@domain.com", Credits = 1 },
    new Customer { ClientId = 3, Email = "client3@domain.com", Credits = 1 },
};

List<Emails> emails = new List<Emails> 
{ 
    new Emails { ClientId = 1, Email = "client1-2@domain.com" },
    new Emails { ClientId = 1, Email = "client1-3@domain.com" },
    new Emails { ClientId = 2, Email = "client2-1@domain.com" },
};

その場合は、以下のクエリを使用して実行してください。

var result = from c in customers
             let _emails = emails.Where(e => c.ClientId == e.ClientId).Select(t => t.Email)
             where c.Email == "client3@domain.com" || _emails.Contains("client3@domain.com")
             select new
             {
                 Allowed = c.Credits > 0,
                 MainEmail = c.Email
             };

お役に立てば幸いです。

于 2012-11-14T15:57:05.563 に答える