0

私は linq to sql の初心者で、linq で処理できるクエリの種類を理解しようとしています。

これが私のデータベーススキームです。

ここに画像の説明を入力

特定のユーザーのすべての顧客を取得したいのですが、これが私が行ったことです。

var userId = 4;
var companies = from c in db.Company
                where c.UserId == userId
                select c.Id;

var costumers = from c in db.Customers
                where companies.Contains(c.CompanyId)
                select c;

私はそれが良いアプローチであるかどうか疑問に思っています.このタイプのクエリを処理するためのより良い方法はありますか?

4

3 に答える 3

0

次の方法でも顧客を獲得できます。

  var result = db.Customers.Join(
               db.Company, customer => customer.CompanyId, comp => comp.Id, (customer, comp) 
               => new { customer, comp }).Where(@t => @t.comp.UserId == 4)
               .Select(@t => @t.customer);
于 2013-09-20T11:00:27.773 に答える
0

このようにシンプルにすることもできます。

 select * from db.Customers Cus
 inner join db.company Com on Com.Id = Cus.CompanyId
 where Com.UserId= userId
于 2013-09-20T11:12:43.373 に答える
0

Contains は SQL の IN に相当し、Linq ステートメントは SQL ステートメントに変換されます。そのため、Linq でパフォーマンスを向上させる別の方法は本当にわかりません。より少ないコードを使用したい場合は、代わりに次のことを試すことができます。

var companies = db.Companies.Where(x=> x.UserId == userid).Select(x=>x.Id);
var customers = db.Customers.Where(x=> companies.Contains(x.CompanyId));
于 2013-09-20T10:53:29.767 に答える