Benutzer mit den meisten Antworten
LINQ-Ausdruck hat einen Fehler

Frage
-
Hallo,
wie muss der folgende LINQ-Ausdruck geändert werden, damit dieser funktioniert.
Fehler: Cannot convert expression 'MobileDevice' to return type 'bool'
var mobileDevice = _users.Any(u => u.MobileDevices.FirstOrDefault(d => d.Name == device.DeviceName));Ich will, dass jeder User in der Liste _users nach seinen Mobilgeräten durchsucht wird.
Wird ein Mobilgerät gefunden, dessen Name mit device.DeviceName übereinstimmt, dann soll dieses an var mobileDevice übergeben werden.Viele Grüße
Alexander
Antworten
-
Hallo Alexander,
ich fragte nur, weil dein Code nun so gar nicht zu deiner Anforderung gepasst hat.
Jetzt ist es klar und Du kannst das Gewünschte bspw. so erreichen:
String deviceName = "Device B 1"; List<User> users = new List<User>(); users.Add( new User() { Name = "User A", MobileDevices = new List<MobileDevice>() { new MobileDevice() { Name = "Device A 1" }, new MobileDevice() { Name = "Device A 2" } } } ); users.Add( new User() { Name = "User B", MobileDevices = new List<MobileDevice>() { new MobileDevice() { Name = "Device B 1" }, new MobileDevice() { Name = "Device B 2" } } } ); var mobileDevice = ( from u in users from d in u.MobileDevices where d.Name == deviceName group d by d.Name into r select r.FirstOrDefault() ).FirstOrDefault();
Es gibt auch andere Wege und ggfs. hat sich hier noch ein Fehler eingeschlichen, es sollte dir aber zeigen, wie es generell geht und die ausreichend Denkanstöße liefern.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert AlexanderRi Freitag, 22. Juni 2018 11:35
Alle Antworten
-
Hallo Alexander,
Any erwartet wie die meisten anderen Funktionen dieser Art kein Objekt vom Typ "Irgendwas" sondern eine Funktion mit einer oder mehreren Bedingung(en), die true/false zurückgeben.
Frage ist aber auch, was soll eigentlich ermittelt werden?
Dein Code sagt eigentlich, dass Du eine Liste von Users, nicht von MobileDevices ermittelst. Daher die Frage: Was genau willst Du machen? Kann ein MobileDevice nur ein einziges mal vorkommen? Oder auch bei mehreren Usern? Willst Du dann die User haben oder nur die MobileDevices? Falls letzteres, brauchst Du einen Bezug zum User?
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo Stefan,
das gewünschte Ergebnis habe ich bereits oben genannt.Ich will, dass jeder User in der Liste _users nach seinen Mobilgeräten durchsucht wird.
Wird ein Mobilgerät von einem User gefunden, dessen Name mit device.DeviceName übereinstimmt, dann soll dieses Mobilgerät an die Variable mobileDevice übergeben werden."
Der Name des Mobilgerätes ist hier eindeutig. Den User benötige ich nicht.
Viele Grüße
Alexander -
Hallo Alexander,
ich fragte nur, weil dein Code nun so gar nicht zu deiner Anforderung gepasst hat.
Jetzt ist es klar und Du kannst das Gewünschte bspw. so erreichen:
String deviceName = "Device B 1"; List<User> users = new List<User>(); users.Add( new User() { Name = "User A", MobileDevices = new List<MobileDevice>() { new MobileDevice() { Name = "Device A 1" }, new MobileDevice() { Name = "Device A 2" } } } ); users.Add( new User() { Name = "User B", MobileDevices = new List<MobileDevice>() { new MobileDevice() { Name = "Device B 1" }, new MobileDevice() { Name = "Device B 2" } } } ); var mobileDevice = ( from u in users from d in u.MobileDevices where d.Name == deviceName group d by d.Name into r select r.FirstOrDefault() ).FirstOrDefault();
Es gibt auch andere Wege und ggfs. hat sich hier noch ein Fehler eingeschlichen, es sollte dir aber zeigen, wie es generell geht und die ausreichend Denkanstöße liefern.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert AlexanderRi Freitag, 22. Juni 2018 11:35