LINQ to SQL Select Distinct par Plusieurs Colonnes et de revenir ensemble de l'entité
Je travaille avec une base de données de tiers et ont besoin de sélectionner un ensemble distinct de données pour le marché spécifique que je suis de regarder dans. Les données sont les mêmes pour chaque marché, donc il est inutile de tirer à tout, et je ne veux pas coder en dur une logique autour d'elle que nous travaillons avec les fournisseurs pour résoudre le problème, mais nous avons besoin d'un correctif qui fonctionne avec les fournisseurs de corriger ainsi que la façon dont la base de données est tel qu'il pourrait être un certain temps avant de thier correctif va vivre.
Je ne veux pas de groupe par tout ce que je veux obtenir les données au niveau le plus bas, mais je ne veux pas de données redondantes. Ma requête ressemble à ceci...
determinantData = (from x in dbContext.Datas
where x.Bar.Name.Equals(barName) &&
x.Something.Name.Equals(someName) &&
FooIds.Contains(x.Foo.Id) &&
x.Date >= startDate &&
x.Date <= endDate
select x).Distinct();
Ce n'est pas ce que j'attends. Je souhaite sélectionner les différents dossiers par trois propriétés, dire Foo
, Bar
, et Something
mais de retour de la totalité de l'objet. Comment puis-je faire cela à l'aide de LINQ?
Je m'en rends compte, je ne savais pas comment la poser dans une meilleure façon.. en gros je ne veux pas d'agréger les autres données qui ne fait pas partie de la distinction, mais j'ai encore envie de sélectionner des données.
OriginalL'auteur shuniar | 2011-09-09
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
group by
avec les propriétés que vous souhaitez être distinct, puis sélectionnez le premier élément de chaque groupe:en fait, après quelques tests, il est plus proche de 3 minutes pour générer le rapport.
une alternative est d'utiliser
AsEnumerable()
de faire le regroupement dans la mémoire de données correspondant. Ensuite, vous pouvez également utiliserDistinctBy
de la MoreLinq projet: code.google.com/p/morelinq/source/browse/trunk/MoreLinq/...J'ai fini par utiliser la DistinctBy méthode de MoreLinq et il a accéléré ma requête. J'ai dû
ToList()
mes données avant de les appeler parce que j'ai été en cours d'exécution dans le "un autre lecteur de données est déjà associé..." l'exception". Mais encore, beaucoup plus rapide qu'initialement. Marqué comme réponse, merci!OriginalL'auteur BrokenGlass