Linq to Sql - 如何从二级表获取数据

时间:2013-09-20 10:16:01

标签: c# linq linq-to-sql

我是linq to sql的新手,只是想了解我能用linq处理什么类型的查询。

这是我的数据库方案,

enter image description here

我希望得到特定用户的所有客户,这就是我所做的,

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;

我只是想知道这是否是一个很好的方法,是否有更好的方法来处理这类查询?

3 个答案:

答案 0 :(得分: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));

答案 1 :(得分: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);

答案 2 :(得分:0)

你也可以像这样保持简单。

 select * from db.Customers Cus
 inner join db.company Com on Com.Id = Cus.CompanyId
 where Com.UserId= userId