0
votes

Obtenir toutes les données de SQL à l'aide de LINQ avec des ID séparés par des virgules

J'ai une chaîne d'Empidés séparés par des virgules comme:

Empid: "2007.2008 2002.1992,1000 218108 1085

et je Besoin de récupérer les enregistrements de tous les employés spécifiés à l'aide de la requête LINQ. Je l'ai essayé avec une boucle, mais j'ai besoin d'obtenir cela de manière efficace et plus rapide.

Voici ce que j'ai utilisé avec boucle. xxx

mais ce que je suis besoin est d'utiliser une requête unique Linq ou Lambda pour récupérer la même chose. Sans boucle


9 commentaires

Qu'est-ce que tu as essayé jusque-là? Montrez un exemple de code que vous avez déjà - cela peut aider à rationaliser les autres membres du site pour vous répondre rapidement.


Convertissez d'abord votre (virgule) EMPID séparé (virgule) To String Array, comme var EMPAR = EMPID.Split (','); Var EmployéResult = Emplypeheys.Où (x => EMParr.Contains (x .Empid.tostring ()));


@Rafalon Oui Pouvez-vous donner plus de détails sur la même chose.


@Rajeev tableaux n'a pas contient


@ Michaelschönbauer n'existe pas une extension LINQ pour les tableaux qui nous permettent d'utiliser contient alors? La solution acceptée ici semble utiliser contient sur tableaux


@ Michaelschönbauer, j'ai utilisé contient sur un tableau avec Linq plusieurs fois dans mon code. Vous pouvez vérifier à nouveau.


@ Rajeevkumar, merci beaucoup rajeev, cela a fonctionné comme prévu !!


@ NE2, vous êtes le bienvenu! S'il vous plaît voter pour mon commentaire aussi utile.


@Rajeevkumar pouvez-vous s'il vous plaît le poster comme une réponse ici?


3 Réponses :


1
votes

Si les identifiants que vous souhaitez récupérer sont des numéros, pas des chaînes, vous ne devez pas convertir la chaîne en une gamme de chaînes, mais à une séquence de chiffres:

var fetchedEmployees = dbContext.Employees
    .Where(employee => employeeIdsToFetch.Contains(employee.Id))
    .Select(employee => new
    {
         // Select only the employee properties that you plan to use:
         Id = employee.Id,
         Name = employee.Name,
         ...
    });


1 commentaires

Merci @harald pour votre aide et votre suggestion.



0
votes

Vous pouvez utiliser le Expression classe pour construire un FUNC à partir de votre chaîne et utilisez-le avec le METHODE: xxx

et si vous avez cette solution pour fonctionner avec LINQ à SQL, il suffit de ne pas compiler l'expression à la fin et laissez le moteur LINQ à SQL le compiler à une expression SQL efficace. < p> au lieu de la méthode globate (qui produira une expression avec une complexité linéaire), on pourrait utiliser une approche de division et conquérir pour plier les valeurs en une seule valeur.

Par exemple avec Cette classe: xxx

et ensuite nous pouvons faire xxx

qui donne à l'évaluation une complexité de log ( n) .


0 commentaires

1
votes

Conversion d'abord votre (virgule) Empid séparé à la matrice de chaîne comme ci-dessous: XXX

J'espère que cela aidera quelqu'un.


0 commentaires