Laden...

Subnetze anhand IPs über LINQtoSQL Abfrage

Erstellt von Yheeky vor 14 Jahren Letzter Beitrag vor 13 Jahren 1.775 Views
Y
Yheeky Themenstarter:in
200 Beiträge seit 2008
vor 14 Jahren
Subnetze anhand IPs über LINQtoSQL Abfrage

Hi,

ich habe folgendes Problem:
Ich habe eine Datenbank mit einer Tabelle mit ganz vielen IP-Adressen. Nun möchte ich auf meiner Webseite einen Filter anbieten, der einem die einzelnen Subnetze anzeigt. Ich benötige also eine LINQtoSQL-Abfrage, die die ersten drei Oktette abfragt UND zudem noch ein Distinct darüber macht. Kann mir da jemand helfen?

Meine momentane Abfrage sieht so aus, aber sie funktioniert nicht:

var query = (from ips in IPAddresses
            orderby ips.Name
            select new Subnet
            {
                Name = ips.Name.Substring(0, 11)
            }).Distinct();

Hoffe mir kann da jemand unter die Arme greifen.
Danke im Voraus!

Liebe Grüße,
Yheeky

1.433 Beiträge seit 2006
vor 14 Jahren

So wirds nach dem dritten Oktett gefilter, also dem Subnet.


        static void Main(string[] args)
        {
            string[] ipadresses = new string[] { "192.168.7.1", "192.168.55.1", "192.168.3.2", "192.168.110.252" };
            IList<IPAddress> ipAddresses = new List<IPAddress>();

            for (int i = 0; i < ipadresses.Length; i++)
            {                
                ipAddresses.Add(IPAddress.Parse(ipadresses[i]));
            }

            Console.WriteLine("Unsortiert");
            ipAddresses.ToList().ForEach(ip => Console.WriteLine(ip.ToString()));

            Console.WriteLine("--------------------------------------------------");
            Console.WriteLine("Sortiert");

            ipAddresses = (from ip in ipAddresses orderby int.Parse(ip.ToString().Split('.')[2].ToString()) ascending select ip).ToList();

            ipAddresses.ToList().ForEach(ip => Console.WriteLine(ip.ToString()));

            Console.ReadKey();
        }

Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt

Y
Yheeky Themenstarter:in
200 Beiträge seit 2008
vor 14 Jahren

Hi,

danke für den Tipp. Habs nun doch noch etwas anders gelöst, aber im Ansatz hat´s mir geholfen 😃

Danke und Gruß,
Yheeky

F
10.010 Beiträge seit 2004
vor 14 Jahren

Du weisst schon, das es der Nettiquette entspricht solche Lösungen dann auch zu posten?

Y
Yheeky Themenstarter:in
200 Beiträge seit 2008
vor 13 Jahren

Sorry für die späte Antwort. Habe es heute erst gelesen. Hier die Funktion:


public SelectList GetSubnets(string subnetValue)
{
            // Create query for getting IPAddresses.
            var ipQuery = from ips in Db.IPAddresses
                          select ips.Name;

            // Create list for IPAddresses and add "Select Subnet" as first entry in ipList.
            var ipList = new List<String> {"Select Subnet"};

            // Go through ipQuery and write subnets in ipList.
            foreach (var singleIp in ipQuery)
            {
                // Subnet variable: converts IPAddress to subnet.
                var ipString = singleIp.Substring(0, 11);

                // Checks if subnet already exists in ipList: if not, add it to ipList.
                if (!ipList.Contains(ipString))
                {
                    ipList.Add(ipString);
                }
            }

            // Returns ipList as SelectList.
            return subnetValue != null ? new SelectList(ipList, subnetValue) : new SelectList(ipList);
}

Gruß Yheeky