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?
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(); } } }
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.
items.Where(p =>