我有一个连接两个表的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 |
----------------------------
我想要每个公司的第一部手机
答案 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()'方法将返回集合中的第一个项目。如果集合不包含任何元素,则将返回默认对象。对于可空类型,这将是一个“空”对象。这是防止应用程序因与空集合相关的异常而失败的好方法。