Je ne suis pas sûr de ce que je manque, mais je me suis débattu à celui-ci tout l'après-midi.Linq to Entities Sélectionnez Distinct
J'ai vue Sql Server d'entreprises qui ressemble à ceci:
CompanyId varchar(30) NOT NULL
CompanyName varchar(100) NOT NULL
CompanyPriority int NULL
ConfigItem int NOT NULL
avec des données qui ressemble un peu à ceci:
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
J'essaie d'obtenir une liste distincte de entreprises. La requête SQL Je veux exectute est
select distinct CompanyId, CompanyName,CompanyPriority from vwCompany
qui me donne exactement les résultats que je veux ce qui serait
00001 | Company One | 99
00002 | Company Two | 99
Mais pour la vie de moi je ne peux pas trouver la requête LINQ qui entraîne ce sql, ou tout ce qui produit les mêmes résultats. Toutes les questions que j'ai trouvées utilisent le groupage qui fonctionne bien dans mes tests unitaires mais ne renvoie pas de résultats distincts lorsqu'il est exécuté sur une base de données réelle.
EDIT:
J'ai essayé quelques petites choses sur la base des réponses à ce jour.
Dim data = _miRepository.GetCompanies().
Select(Function(c) New With {
.companyId = c.CompanyId,
.companyName = c.CompanyName,
.companyPriority = c.CompanyPriority
}
).Distinct().ToList()
génère le 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]
qui n'a pas l'opérateur distinct dans du tout :(
Et oui, je le fais en VB.NET juste pour faire il est plus difficile de trouver de bons exemples: \
EDIT 2:
Je suis en train de se rapprocher de Eric Js rép er comme je peux en VB.
Dim data = (From c In _miRepository.GetCompanies()
Select New With {.companyId = c.CompanyId,
.companyName = c.CompanyName,
.companyPriority = c.CompanyPriority
}
).Distinct().ToList()
me donne
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]
Encore aucun mot-clé distinct pour trouver :(
Peut-être qu'il ya une différence subtile dans VB.NET que je suis absent.
EDIT 3 :
Afin de progresser dans le reste de cette application, j'ai abandonné pour le mo ment et créé une nouvelle vue (vwDistinctCompanies) en utilisant l'instruction sql au début de la question.
Si quelqu'un parvient à faire fonctionner ceci dans VB.NET contre une vue Sql s'il vous plaît faites le moi savoir. Tout à fait pourquoi cela devrait être si difficile dans LINQ Je n'ai aucune idée :(
Juste au cas où vous essayez encore, j'ai essayé plusieurs requêtes moi-même et les différents d'autres utilisateurs. Il semble que la réponse de @Eric J. me donne l'instruction SQL qui utilise le mot-clé 'DISTINCT'. Je ne sais pas comment traduire cela à VB comme je les ai couru à travers C# – Steven
Merci d'avoir essayé. Je ne pouvais pas obtenir d'entre eux pour faire une requête distincte. Je ne sais pas si c'est parce que c'est en VB ou si c'est parce que c'est contre une vue plutôt qu'une table. – Nick
Hey, j'ai couru d'autres questions. Regardez ma réponse éditée. J'espère que cela aide. – Steven