Convert Dictionary foreach search to Linq

Hi

is it possible to convert this code to use Linq instead?
private bool Exists(string name)
        {
            foreach (ClientData p in _clients.Keys)
            {
                if (p.Id.Equals(name, StringComparison.OrdinalIgnoreCase))
                {
                    return true;
                }
            }
 
            return false;
        }

Open in new window

LVL 1
AWestEngAsked:
Who is Participating?
 
abelConnect With a Mentor Commented:
Yes, it is (btw, there's a LINQ zone too, you may have more luck there...) Here's a one-liner, but you may want to split it a bit:

private bool Exists(string name)
{
    return (from p in _clients.Keys 
        where p.Id.Equals(name, StringComparison.OrdinalIgnoreCase) 
        select p).FirstOrDefault() != null;
}

Open in new window

0
 
Fernando SotoConnect With a Mentor RetiredCommented:
Hi AWestEng;

Here is code snippet showing how it can be done using Linq methods.

Fernando
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication13
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        List<ClientData> _clients = new List<ClientData>();
 
        private void Form1_Load(object sender, EventArgs e)
        {
            ClientData cd = new ClientData() { Id = "John" };
            _clients.Add(cd);
            cd = new ClientData() { Id = "William" };
            _clients.Add(cd);
            cd = new ClientData() { Id = "AWestEng" };
            _clients.Add(cd);
            cd = new ClientData() { Id = "Alice" };
            _clients.Add(cd);
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            // User types name in text box and copies to name
            string name = textBox1.Text.Trim();
 
            if (!Exists(name))
            {
                MessageBox.Show("Name was NOT found");
            }
            else
            {
                MessageBox.Show("Name was found");
            }
        }
 
        private bool Exists(string name)
        {
            return _clients.Where(c => c.Id.Equals(name, StringComparison.OrdinalIgnoreCase))
                           .Select(c => c.Id == String.Empty ? false : true).FirstOrDefault();
        }
    }
 
    public class ClientData
    {
        public string Id { get; set; }
    }
}

Open in new window

0
 
AWestEngAuthor Commented:
sorry FernandoSoto:, I accepted able's reply you where posting yours, I'm sorry m8..
0
Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
Fernando SotoRetiredCommented:
Not a problem, that happens. Have a great day.  ;=)
0
 
abelCommented:
If you want, you can request reopen and split. I won't object to that. FernandoSoto put in quite some effort, though I believe his solution is about the same as what I showed (though slightly more verbose perhaps).
0
 
Fernando SotoRetiredCommented:
No need to do that, it is really not a problem.  ;=)
0
 
AWestEngAuthor Commented:
Thx guys,, perfect job
0
 
Fernando SotoRetiredCommented:
Thanks AWestEng and abel.  ;=)
0
 
AWestEngAuthor Commented:
No!  Thank you guys! Thx for always put your own time into others problem and help out.
I really appreciate it . :)
0
 
abelCommented:
you're welcome, both, always around to help (almost)  :)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.