2012-10-01 31 views
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 | 
---------------------------- 

我需要得到仅最前一页在电话表不是一切 该怎么做?
编辑:也许我不清楚有什么想抱歉的。
i ment:
----------------------------
company1 | 12345 |
----------------------------
company2 | 43242 |
----------------------------

我想第一个电话每家公司

+1

如果你有你的DBML的关系,你可能只是这样做:'VAR miniCompanies = db.Companies.Select(C =>新{c.Name,C .Phones.First()。Phone});' – cjk

+0

这不是真正的公司2的第一个电话。我假定你是指任何电话。 –

+0

不,这是一个打字错误,我会修复它 – Star

回答

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你可以试试与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

+0

ToList()和Distinct()看起来有点浪费。 –

+0

这只返回第一家公司和电话,而不是每个公司的第一个电话 – cjk

+0

为什么downvote ??? –

-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()方法返回集合中的第一项。如果集合不包含元素,则将返回默认对象。对于可为空的类型,这将是一个'null'对象。这是防止应用程序因与空集合相关的异常而失败的好方法。

+0

这只会返回第一家公司和电话,而不是每个公司的第一个电话 – cjk