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
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
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
Du weisst schon, das es der Nettiquette entspricht solche Lösungen dann auch zu posten?
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