获得第一行加入

时间:2012-10-01 12:24:46

标签: c# linq join

我有一个连接两个表的linq查询(实际数据库中没有关系)

关系是: 公司1 - n电话

var miniCompanies =
    (from companies in db.Companies 
     join phones in db.Phones on companies.Id equals phones.CompanyId
     select new
     {
         companies.Name,
         phones.Phone,
     }).ToList().Distinct();

这会返回如下内容:

----------------------------
company1     |    12345    |
----------------------------
company1     |    23456    |
----------------------------
company2     |    43242    |
----------------------------
company2     |    34234    |
----------------------------
company2     |    65442    |
----------------------------

我只需要在电话表中获得fisrt而不是一切 怎么做?
编辑:也许我不清楚为什么要抱歉 我想:
    ----------------------------
    company1 | 12345 |
    ----------------------------
    company2 | 43242 |
    ----------------------------

我想要每个公司的第一部手机

3 个答案:

答案 0 :(得分:2)

您可以使用GroupBy:

var miniCompanies =
(from companies in db.Companies 
 join phones in db.Phones on companies.Id equals phones.CompanyId
 select new
 {
     companies.Name,
     phones.Phone,
 }).GroupBy(c=>c.Name).Select(c=>c.FirstOrDefault()).ToArray();

答案 1 :(得分:-1)

1您可以尝试使用First operator

(from companies in db.Companies 
 join phones in db.Phones on companies.Id equals phones.CompanyId
 select new
 {
     phones.Phone,
 }).First();

链接:http://msdn.microsoft.com/fr-fr/library/vstudio/system.linq.queryable.first.aspx

2您也可以使用FirstOrDefault

链接:http://msdn.microsoft.com/fr-fr/library/vstudio/system.linq.queryable.firstordefault.aspx

3您也可以使用Take(1);

链接:http://msdn.microsoft.com/fr-fr/library/vstudio/bb300906.aspx

答案 2 :(得分:-2)

我会使用以下内容:

var miniCompanies =
(from companies in db.Companies 
 join phones in db.Phones on companies.Id equals phones.CompanyId
 select new
 {
     companies.Name,
     phones.Phone,
 }).ToList().Distinct().FirstOrDefault();

'FirstOrDefault()'方法将返回集合中的第一个项目。如果集合不包含任何元素,则将返回默认对象。对于可空类型,这将是一个“空”对象。这是防止应用程序因与空集合相关的异常而失败的好方法。