我不确定我错过了什么,但我整个下午都在纠结这个。
我有一个公司的 Sql Server 视图,如下所示:
CompanyId varchar(30) NOT NULL
CompanyName varchar(100) NOT NULL
CompanyPriority int NULL
ConfigItem int NOT NULL
使用看起来有点像这样的数据:
00001 | Company One | 99 | 123
00001 | Company One | 99 | 456
00001 | Company One | 99 | 789
00002 | Company Two | 99 | 123
00002 | Company Two | 99 | 456
我正在尝试获得一份不同的公司名单。我要执行的 sql 查询是
select distinct CompanyId, CompanyName,CompanyPriority from vwCompany
这给了我我想要的结果
00001 | Company One | 99
00002 | Company Two | 99
但是对于我的一生,我找不到导致这个 sql 的 LINQ 查询,或者任何产生相同结果的东西。
我发现的所有问题都使用分组,它在我的单元测试中工作正常,但在针对实际数据库执行时无法返回不同的结果。
编辑:
因此,到目前为止,我已经根据答案尝试了一些事情。
Dim data = _miRepository.GetCompanies().
Select(Function(c) New With {
.companyId = c.CompanyId,
.companyName = c.CompanyName,
.companyPriority = c.CompanyPriority
}
).Distinct().ToList()
生成sql
SELECT
1 AS [C1],
[Extent1].[CompanyId] AS [CompanyId],
[Extent1].[CompanyName] AS [CompanyName],
[Extent1].[CompanyPriority] AS [CompanyPriority]
FROM (SELECT
[vwCompany].[CompanyId] AS [CompanyId],
[vwCompany].[CompanyName] AS [CompanyName],
[vwCompany].[CompanyPriority] AS [CompanyPriority],
[vwCompany].[CiId] AS [CiId]
FROM [dbo].[vwCompany] AS [vwCompany]) AS [Extent1]
它根本没有 distinct 运算符:(
是的,我在 VB.NET 中这样做只是为了更难找到好的示例:\
编辑2:
我试图在 VB 中尽可能接近 Eric Js 的答案。
Dim data = (From c In _miRepository.GetCompanies()
Select New With {.companyId = c.CompanyId,
.companyName = c.CompanyName,
.companyPriority = c.CompanyPriority
}
).Distinct().ToList()
给我
SELECT
1 AS [C1],
[Extent1].[CompanyId] AS [CompanyId],
[Extent1].[CompanyName] AS [CompanyName],
[Extent1].[CompanyPriority] AS [CompanyPriority]
FROM (SELECT
[vwCompany].[CompanyId] AS [CompanyId],
[vwCompany].[CompanyName] AS [CompanyName],
[vwCompany].[CompanyPriority] AS [CompanyPriority],
[vwCompany].[CiId] AS [CiId]
FROM [dbo].[vwCompany] AS [vwCompany]) AS [Extent1]
仍然没有找到不同的关键字:(
也许我错过了 VB.NET 的细微差别。
编辑 3:
为了继续这个应用程序的其余部分,我暂时放弃了,并在问题开始时使用 sql 语句创建了一个新视图 (vwDistinctCompanies)。
如果有人设法让这个在 VB.NET 中针对 Sql 视图工作,请告诉我。很明显为什么这在 LINQ 中会如此困难,我不知道 :(