【发布时间】:2012-11-15 05:46:18
【问题描述】:
我不确定我错过了什么,但我整个下午都在为这个而烦恼。
我有一个公司的 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 中会如此困难,我不知道:(
【问题讨论】:
-
以防万一您仍在尝试,我自己尝试了多个查询以及其他用户的不同查询。 @Eric J. 的答案似乎是给了我使用
DISTINCT关键字的 SQL 语句。当我通过 C# 运行它们时,我不知道如何将其转换为 VB -
感谢您的尝试。我无法让他们中的任何一个做出不同的查询。我不确定是因为它是在 VB 中,还是因为它是针对视图而不是表格。
-
嘿,我进行了进一步的查询。看看我编辑的答案。希望对您有所帮助。
标签: vb.net entity-framework linq-to-entities distinct