Johan
Johan

Reputation: 41

Retrieving item from list

I'm having some problems retrieving information from a list.

In this case I'd like to get the name from a list, eventually I want it turned into a string. This is what I have:

public string ShowName(int patientcode)
{
    List<ExtendPatientInfo> patientdata = dk.RetrieveList(patientcode);
    string name = patientdata. <What here?>
    return name;
}

In the class ExtendPatientInfo I have this, which I think is allright:

private string name;
public ExtendPatientInfo(string name)
{
    this.name = name;
}

public string Name
{
    get
    {
        return name;
    }
}

I tried using a few things. Like Contains, Find, FindIndex and where. But none of these worked for me because I probably messed something up somewhere. Anybody that can help me?

Upvotes: 2

Views: 39531

Answers (5)

hocho
hocho

Reputation: 1749

If I understand your question, you are looking for something like this

ExtendPatientInfo patient = 
         patientdata.FirstOrDefault(x => x.patientcode == patientcode);

return 
    (patient != null)
        ? patient.Name
        : null

Upvotes: 0

DLeh
DLeh

Reputation: 24385

You probably want to use Linq. Linq allows you to cycle through a list easily and get what you want.

For example, if you want the patient named "Johan":

ExtendPatientInfo patient = patientdata.Where(x => x.Name == "Johan").FirstOrDefault();
string name = patient.Name;

Upvotes: 1

Mike Cheel
Mike Cheel

Reputation: 13106

Try

string name = string.Empty;
var pd = patientData.FirstOrDefault();
if(pd != null)
     name = pd.Name

This code gets the first item returned or null. If it isn;t null it retrieves the Name property value into string variable name.

Incidentally, if you don;t want to learn linq right now you can access List<> via index like:

 patientData[0].Name

You will still want to check that patientData[0] is not null before checking the Name property.

Upvotes: 1

Habib
Habib

Reputation: 223207

Well you have a list of object and you want to show properties of each object, then you have to access each object in the list and then access it properties. Something like:

foreach(var item in patientdata)
{
  Console.WriteLine(item.Name);
  //rest of the fields
}

If you want to select a single object from your list then you cause use First / FirstOrDefault , Single / SingleOrDefault depending on your need. But you need an individual object to access it properties. You can't access a property directly from a list.

var item = patientData.FirstOrDefault();
if(item != null)
   Console.WriteLine(item.Name);

Upvotes: 3

Justin Pihony
Justin Pihony

Reputation: 67065

You have to choose the patient. If it is all the same data for the patient, then you can use LINQ's First

patientdata.First().Name

But, if they are all different, then you could map the list to only have Names

patientdata.Select(x=>x.Name)

At which point, you would still need to iterate through the list to display each name or whatever you need.


As Henk points out, if this is always going to be a list of one item, then you could use

patientdata.Single().Name

*The caveat with Single is from MSDN

Returns the only element of a sequence, and throws an exception if there is not exactly one element in the sequence.

Upvotes: 7

Related Questions