Comment changer de valeur d'un objet dans code: p> foreach code> à partir de
ienumerable
modèle code>. Ensuite, je suis en boucle le résultat en utilisant des objets, puis la définir. Mais le retour pour
condition code> ne change toujours pas? Comment définir la condition à l'intérieur de la recherche, puis retournez-le pour résultat p> p>
3 Réponses :
Ici, vous essayez de créer une liste de où le Modèle code> à l'aide de
linq code>, alors vous êtes itération de la même manière pour ajouter une propriété supplémentaire à chaque élément. Alors pourquoi n'ajoutez-vous pas la propriété au moment de la création de la liste pour une boucle supplémentaire? Faites des choses simples en essayez quelque chose comme ceci:
getcondition () code> peut être défini comme suit: p>
La règle générale est que vous ne pouvez pas vous attendre à un Dans ce cas, ce que vous avez est en fait une requête de base de données de type Si vous essayez de modifier les objets retournés sans modifier les enregistrements sous-jacents. (semble être le cas) alors vous devez matérialiser la requête dans une collection en mémoire. Il existe quelques façons de le faire en fonction de ce que vous attendez avec les données retournées. P> Le plus simple consiste à convertir la requête en une matrice à l'aide du iEnumerable
ienumerable
ienumerable
iquérirable
ienumerable
iquérirable
.toparray () Code> Méthode d'extension: p>
public Model[] ListDaftarPjsp()
{
var query = from x in db.PJSPEvaluation
select new Model
{
foo = x.Foo,
bar = x.Bar
};
var list = query.ToArray();
foreach (Model item in list)
{
item.condition = "example";
}
return list;
}
Il y a déjà pour ce sujet, mais il y a un moyen plus efficace de le faire. Il suffit d'utiliser la liste au lieu de matry [].
public List<Model> ListDaftarPjsp() { List<Model> list = from x in db.PJSPEvaluation select new Model { foo = x.Foo, bar = x.Bar }; foreach (Model item in list) { item.condition = "example"; } return list; } public class Model{ public string foo{ get; set; } public string bar { get; set; } public string condition{ get; set; } }
Comment savez-vous, cela ne change pas?
Vous ne pouvez pas modifier la liste de propriétés à l'intérieur de la boucle de Forache, vous devez le renvoyer à partir de Linq:
à partir de x dans db.pjspaSpevaluation Sélectionnez Nouveau modèle {foo = x.foo, bar = x.bar, condition = "Exemple"}; < / code>.
iEnumerable code> crée une vue. Il semble probable que vous lisiez à partir de la base de données à chaque fois que vous bouclez via la liste
code> dans votre exemple.
Survolez une liste de retour dans la dernière ligne. La condition ne change pas @backs
Google "Exécution différée":
Liste code> est seulement une requête i>, pas la répondez i> à cette requête. Utilisation de
foreach code> vous exécutez cette requête. Mais alors vous retournerez
list code>, l'original requête i>, alors tout le monde itération de cette question à nouveau exécute i>, créant de nouveau
modèle code > s à nouveau ...
Je ne peux pas faire comme ça parce que j'ai de nombreuses conditions insces pour recruter
if (item.foo == 1) {item.condition = a} else si (item.foo == 2) {item.condition = b} code> ..... et beaucoup à nouveau @Tetsuyayamamoto
Vous avez besoin de matérialiser une requête avant de mettre à jour une propriété:
var matérialisiséList = list.tolist (); code> boucle via
Matérialisateurlist code> et met à jour code>.