0

我有一个连接两个表的 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    |
----------------------------

我只需要获取电话表中的第一个而不是所有内容怎么做?
编辑:也许我不清楚要为此感到抱歉。
我 ment:
----------------
company1 | 12345 |
----------------------------
公司2 | 43242 |
----------------------------

我想要每个公司的第一部电话

4

3 回答 3

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();
于 2012-10-01T12:55:39.223 回答
-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

于 2012-10-01T12:27:15.793 回答
-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()' 方法将返回集合中的第一项。如果集合不包含任何元素,则将返回默认对象。对于可空类型,这将是一个“空”对象。这是防止您的应用程序由于与空集合相关的异常而失败的好方法。

于 2012-10-01T12:29:26.887 回答