Methods voor queries

Status
Niet open voor verdere reacties.

Havana1986

Nieuwe gebruiker
Lid geworden
13 jan 2014
Berichten
3
Hallo,

Ik ben op zoek naar een manier hoe ik queries voor een lijst in c# kan opstellen.

Waar ik tot nu toe heb mee zitten jongleren, lijkt maar niet te werken:

Code:
int query1 = pcvoorraad.Where(PC.Geheugen ==  Program.inputgeheugen);

en

Code:
 var Query1= from pc in pcvoorraad where PC.Geheugen == Program.inputgeheugen select pc;



Ik weet dat het wel kan door voor elke query een nieuwe lijst aan te maken zoals hier:

Code:
		public List<PC> SelectieOpGeheugen(int geheugen)
		{
			List<PC> perGeheugen = new List<PC>();
			foreach (PC pc in PCVoorraad)
			{
				if (pc.Geheugen == geheugen)
				{
					perGeheugen.Add(pc);
				}
			}
			return perGeheugen;
		}

		public List<PC> SelectieOpHardeschijf(int hardeschijf)
		{
			List<PC> perHardeSchijf = new List<PC>();
			foreach (PC pc in PCVoorraad)
			{
				if (pc.Hardeschijf == hardeschijf)
				{
					perHardeSchijf.Add(pc);
				}
			}
			return perHardeSchijf;
		}

Maar ik zoek dus een alternatieve manier, zonder voor elke query een nieuwe lijst aan te maken.

Iemand enig idee? Of kan dit helemaal niet zonder meerdere lijsten?

Thx!

Grtz,
Hanne
 
Waar query je uit en wat wil je met de output? Je voorbeelden zijn zo een beetje verwarrend. Gaat dit over linq of database queries? en welk probleem heb je precies met de transitie?

In het geval van linq is het mogelijk een nieuwe lijst te maken met meerdere items per regel, als dat de vraag is
 
Hoi,

Ik heb een vaste input van enkele PC's met specificaties in een list gezet (geen externe database dus).
Bedoeling is dus nu dat ik een output kan geven aan de gebruiker van pc's met een bepaalde specificatie (bijvoorbeeld op type processor, grootte harde schijf,...)
Ik heb een klasse PCshop waarin de query's moeten komen te staan, een klasse PC waarin de specificaties gedefinieerd worden en het programma zelf.

Wat linq betreft, dit heb ik nog niet gezien (zit nog maar in 1ste jaar C#). Ik mag natuurlijk wel alles gebruiken wat er kan gebruikt worden voor C#.

Wat ik me nu eigenlijk vooral afvraag is of het mogelijk is gewoon een lijst te hebben met de voorraad pc's en daar rechtstreeks de resultaten uit weer te geven, of dat je ze eerst in een andere lijst moet zetten, en dan pas kan weergeven(zoals in het laatste voorbeeld).
 
Je zit op het goede spoor, wat je wilt is zoiets als dit:

Code:
var result = voorraad.Where(pc => pc.Geheugen ==  Program.inputgeheugen);
 
Je hebt in principe altijd een temporary list nodig als je die verder wil bewerken. Echter kan dat wel een complexe lijst zijn:

voorbeeldje (form met 1 button) Ik heb de standaardregels even in remark gezet:

[cpp]
//namespace WindowsFormsApplication1
//{
// public partial class Form1 : Form
// {
// public Form1()
// {
// InitializeComponent();
// }

// private void button1_Click(object sender, EventArgs e)
// {
List<linqtest> test = new List<linqtest>();
test.Add(new linqtest("henk", 1));
test.Add(new linqtest("piet", 1));
test.Add(new linqtest("walter", 2));

var output = from a in test where a.number == 1 select a;
foreach (var varout in output)
{
MessageBox.Show(varout.name);
}
// }
// }


public class linqtest
{
public string name;
public long number;

public linqtest(string name, long number)
{
this.name = name;
this.number = number;
}
}
}
[/cpp]

(eigenlijk hetzelfde als bloodshed's voorbeeld, maar in de query taal)
 
Laatst bewerkt:
De lijst moet niet verder bewerkt kunnen worden, dus die temporary list is niet nodig lijkt me.
Ik ga eens even proberen verder te gaan met de lijn van bloodshed (dat was ongeveer wat ik in gedachten had, maar ik kreeg het maar niet goed).
Moest het niet lukken, dan hoor je me hier terug :)

Bedankt alvast!
 
Afgezien van de notatie is er geen wezenlijk verschil tussen onze beide oplossingen
 
Het is zelfs altijd nog 1 regel, ik heb alleen de source lijst en een msg box output er niet bij gezet ;)

Gewoon voorkeur per persoon.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan