Ich versuche, eine alte rohe SQL-Abfrage in Linq mit Entity Framework hier zu konvertieren."IN" Operator in Linq
Es wurde mit dem IN-Operator mit einer Sammlung von Artikeln. Die Anfrage war so etwas wie die:
SELECT Members.Name
FROM Members
WHERE Members.ID IN (SELECT DISTINCT ManufacturerID FROM Products WHERE Active = 1)
ORDER BY Members.Name ASC
Da die Rückkehr der Unterabfrage nicht eine einzelne Zeichenfolge, sondern eine Sammlung von Strings kann ich nicht die String.Contains()
Methode verwenden.
Ich dachte darüber nach, wie etwas zu tun:
var activeProducts = (
from products in db.ProductSet
where product.Active == true
select product.ManufacturerID);
und dann
var activeMembers = (
from member in db.ContactSet
where member.ID.ToString().Contains(activeProducts));
aber es hält an der hinweist, dass das ungültige Argumente hat ... Ich kann nicht wählen, weil activeProducts.ManufacturerID offensichtlich die proprety nicht da ist, da es eine IQueryable gibt ...
Unterm Strich, was ich versuche, hier zu tun ist, eine Liste der Mitglieder zurück, die mindestens eine haben aktives Produkt.
Irgendwelche Hinweise?
[Bearbeiten]
Hier ist die vollständige Abfrage-Code ... Ich habe versucht, mit der enthält auf dem zweiten Ausdruck, Linq schien es nicht zu mögen:
Server Error in '/' Application. LINQ to Entities does not recognize the method 'Boolean Contains[String](System.Linq.IQueryable``1[System.String], System.String)' method, and this method cannot be translated into a store expression.
var activeProduct =(from product in Master.DataContext.ProductSet
where product.Active == true
&& product.ShowOnWebSite == true
&& product.AvailableDate <= DateTime.Today
&& (product.DiscontinuationDate == null || product.DiscontinuationDate >= DateTime.Today)
select product.ManufacturerID.ToString());
var activeArtists = from artist in Master.DataContext.ContactSet
where activeProduct.Contains(artist.ID.ToString())
select artist;
NumberOfArtists = activeArtists.Count();
artistsRepeater.DataSource = activeArtists;
artistsRepeater.DataBind();
[Mehr Details] ManufacturerID ist eine Nullwert-GUID, anscheinend ...
Aus irgendeinem Grund enthält die ContactSet-Klasse kein a Wenn ich mich auf die Produkte beziehe, werde ich wohl eine Join-Abfrage machen müssen, keine Hinweise hier.
Funktioniert nicht, habe einen Linq-Fehler. – Erick
Yup, und Linq mag es immer noch nicht, ich habe gerade entdeckt, dass ManufacturerID ein Guid ist? (NULL-Wert) ... wenn ich eine 'HerstellerID auswählen wähle.Wert "Ich habe Folgendes: LINQ to Entities erkennt die Methode 'Boolean Enthält [Guid] (System.Linq.IQueryable'1 [System.Guid], System.Guid)' nicht, und diese Methode kann nicht in einen Informationsspeicher übersetzt werden Ausdruck. – Erick
Ist das so effizient wie der IN-Operator? – tofutim