| 

.NET C# Java Javascript Exception

3
Ich müsste aus einer List<T> alle Elemente haben die eine Bestimmte ID haben. Die Anzahl der ID's kann verschieden sein. Das heisst, einmal brauche ich nur eine, dann mal 2 oder mal 5.

Ich könnte jetzt die LINQ Abfrage n mal ausführen. Möchte ich nicht.

Die ID's bekomme ich , getrennt. Könnte ich die irgend wie so einer LINQ Abfrage übergeben?

string IDs = "1,3,4";
List<Item> result = items.Where(p => p.ID == IDs).ToList();


Oder so ähnlich.
29.10.2009
GENiALi 2,5k 1 2 8
2 Antworten
2
Hallo,

"Query-Syntax":
var filteredByID =
from id in IDs.Split(',')
join item in fooList on id equals item.ID
select item;


"Erweiterungsmethoden-Syntax":
var filtered =
IDs.Split(',')
.Join(fooList, id => id, item => item.ID, (id, item) => item);


Das ganze Beispiel für meinen Versuch:
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<Foo> fooList = new List<Foo>(10);
for (int i = 0; i < 10; i++)
fooList.Add(new Foo());

string IDs = "1,3,4";

var filteredByID =
from id in IDs.Split(',')
join item in fooList on id equals item.ID
select item;

var filtered =
IDs.Split(',')
.Join(fooList, id => id, item => item.ID, (id, item) => item);
}
}

[DebuggerDisplay("ID des Item: {ID}")]
class Foo
{
private static int _counter = 0;
public string ID { get; set; }
public Foo()
{
this.ID = _counter++.ToString();
}
}
}


Gruss
Günther
29.10.2009
gfoidl 9,4k 3 5
gfoidl 9,4k 3 5
1
Krieg ich es auch mit diesem Syntax hin?
items.Where(p =>
GENiALi 29.10.2009
Mit Where glaube ich nicht. Es gibt auch Join als Erweiterungsmethode - damit gehts dann. Der Compiler macht ja nichts anderes.
Für dieses Bsp. habe ich die "Query-Syntax" gewählt weils mit der Erweiterungsmethode meiner Meinung nach nicht so übersichtlich ist.
gfoidl 29.10.2009
Hab die Antwort dahingeändert angepasst.
gfoidl 29.10.2009
Das war jetzt nicht ganz so einfach. Id ist eine Guid. Aber der Code tut.

string ids = HttpContext.Current.Request["id"].Trim();
List<Post> posts = ids.Split(',').Join(Post.Posts, id => new Guid(id), post => post.Id, (id, post) => post).ToList();
GENiALi 31.10.2009
1
Mit folgender Definition als Voraussetzung
List<string> items = new List<string>() { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
string ids = "1,3,4";

bleibt dieser Einzeiler
List<string> results = items.Where(item => ids.Split(',').Contains(item)).ToList();

Kritik bezüglich Performance, ein Join ist sicher schneller (habe ich jetzt aber nicht getestet)
30.10.2009
me 1,1k 2 9
1
Ich werde die Lösungen dieses Wochenende noch testen. Dann kommt meine Bewertung. :-)
GENiALi 30.10.2009

Stelle deine .net-Frage jetzt!