0
votes

Etat multiple sur la même colonne à l'intérieur de Linq où

Comment puis-je écrire une requête LINQ pour correspondre à deux conditions sur la même colonne de la table?

Ici, une personne peut être affectée à plusieurs types d'œuvres et qu'il stocke dans personnse de la personne "/ code> table contenant Les détails des personnes et de leurs villes de travail. P>

J'ai donc besoin d'obtenir la liste des personnes qui ont à la fois des œuvres à temps plein et indépendantes. P>

J'ai essayé p>

people.where(w => w.worktype == "freelance" && w.worktype == "fulltime")


4 commentaires

Changez l'opérateur de "et" && à "ou" || si je comprends votre objectif? Ce que vous avez actuellement ressemble à un ensemble vide garanti.


Pouvez-vous s'il vous plaît fournir des échantillons de données à titre de référence? Spécifiez que sa structure de données serait également utile.


Si je comprends bien, vous devez obtenir des résultats dans lesquels le travail est égal à "freelance" ou égal à "plein temps". Vous obtenez NULL parce que vous utilisez && opérateur. Changez votre état alors que Egnomérator dit.


J'ai mis à jour la question maintenant. Ici, j'ai besoin d'obtenir la personne qui a à la fois des œuvres à temps plein et indépendantes


3 Réponses :


0
votes
var fulltimeWorkers = people.Where(w=>w.worktype=="fulltime");
var freelanceWorkers = people.Where(w=>w.worktype=="freelance");
List<Person> peopleWhoDoBoth = new List<Person>();
foreach (var worker in fulltimeWorkers)
{
   if (freelanceWorkers.Contains(worker)
      peopleWhoDoBoth.Add(worker);
}

0 commentaires

2
votes

Vous pouvez essayer cette

public class Person {
    public string Name {get;set;}
    public List<PersonWorkType> PersonWorkTypes {get;set;}
}

public class PersonWorkType {
    public string Type {get;set;}
}

public static void Main()
{
    var people = new List<Person>();
    var person = new Person { Name = "Toño", PersonWorkTypes = new List<PersonWorkType>() { new PersonWorkType { Type = "freelance" } } };
    var person2 = new Person { Name = "Aldo", PersonWorkTypes = new List<PersonWorkType>() { new PersonWorkType { Type = "freelance" }, new PersonWorkType { Type = "fulltime" } } };
    var person3 = new Person { Name = "John", PersonWorkTypes = new List<PersonWorkType>() { new PersonWorkType { Type = "freelance" }, new PersonWorkType { Type = "fulltime" } } };

    people.Add(person);
    people.Add(person2);        
    people.Add(person3);

    var filter = people.Where(p => p.PersonWorkTypes.Any(t => t.Type == "freelance") && p.PersonWorkTypes.Any(t => t.Type == "fulltime"));


    foreach(var item in filter) {
        Console.WriteLine(item.Name);
    }
}


1 commentaires

Vous pouvez vérifier cet extraipli dans DOTNETFIDDLE.net/6E3MKL



1
votes

Comme déjà dit, && code> signifie que les deux conditions doivent être remplies. Donc, dans votre état, cela signifie que vous voulez TypeType code> Type à par freelance code> et plein temps code> en même temps, ce qui n'est pas possible :)

Très probablement, vous voulez des employés qui ont du type de travail freelance code> ou plein temps code>, ainsi que votre condition doit être: p> xxx pré>

ou , Si la personne peut être définie plus d'une fois dans cette table, vous pourriez faire: P>

people
  .Where(w=>w.worktype=="freelance" || w.worktype =="fulltime")
  // here I assume that you have name of a person,
  // Basically, here I group by person
  .GroupBy(p => p.Name)
  // Here we check if any person has two entries,
  // but you have to be careful here, as if person has two entries
  // with worktype freelance or two entries with fulltime, it
  // will pass condition as well.
  .Where(grp => grp.Count() == 2)
  .Select(grp => grp.FirstOrDefault());


1 commentaires

Mes exigences ne sont pas ceci. Je dois obtenir que les personnes qui sont à la fois indépendantes et à plein temps, votre requête entraîne des personnes qui ne sont que freelance ou plein temps