Frage

Ich versuche, eine Linq-Anweisung zu erstellen, die beiden Spalten Abfragen, die als Eigenschaften und die auf meiner Einheit existieren, die aber nicht als Spalt in der Datenbank für das Unternehmen vorhanden ist.

Zum Beispiel habe ich eine Sammlung von Buch Einheiten. Jedes Buch hat eine ID und Eigenschaft Titel und eine passende Spalte in der Datenbank. Aber lässt für Buch der Tabelle auch sagen, enthält eine Spalte Feld für Autor und mein Buch Einheit nicht über diese.

Eine normale Abfrage der ID und den Titel beteiligt könnte wie folgt aussehen:

Books.Where(b=>b.ID == 123 && b.Title == "Title")

Aber, ich will auch dynamisch das Äquivalent hinzuzufügen „ AND Autor =‚Name‘“, um die obige Abfrage als auch. Der Autor Eigenschaft existiert nicht auf dem Buch-Objekt.

Die zusätzlichen Felder und die Werte, die sie eigentlich enthalten sollen, in einem Wörterbuch zur Verfügung stehen wird. So muß ich dynamisch mehr hinzufügen UND [Feldname] = '[Wert]' Bedingungen für die Abfrage.

Es könnte helfen, zu erklären, warum ich das brauchen würde, zu wissen, dass ich Azure Tabellen Speicher bin mit und ich habe die serialize außer Kraft gesetzt, die ein Buch Einheit in die XML in Azure gespeichert dreht.

Bearbeiten -

Ich habe versucht, die dynamische Linq-Bibliothek, aber es funktioniert nicht.

Books.Where(b=>b.ID == 123 && b.Title == "Title").Where("Author = @0", "SomeName").ToList();

Löst aus: System.Linq.Dynamic.ParseException: keine Eigenschaft oder ein Feld ‚Autor‘ existiert in Typ ‚Buch‘

.

Auch

Ich weiß mit Books.AddQueryOption ( "$ filter", "Autor eq 'Somename'") funktioniert, wenn allein verwendet. Aber ich habe keine Ahnung, wie AddQueryOption verwenden zusammen mit einer bestehenden Wo Aussage.

War es hilfreich?

Lösung 2

Dies ist nicht möglich mit LINQ

Andere Tipps

Ohne Zugabe Autor Buch, würden Sie entweder ein anderes Objekt mit Autor darauf zu übergeben:

var x = new { Author="SomeName" };  
    Books.Where(b=>b.Id == 1 && b.Title == "Alpha").Where("@1.Author == @0", "SomeName", x);

Oder von Buch erben und eine Autor Eigenschaft nur für diesen Zweck hinzufügen:

public class BookEx : Book {
    public string Author { get; set; }
}

Books.Cast<BookEx>().Where(b=>b.Id == 1 && b.Title== "Alpha").Where("Author == @0", "SomeName");

Versuchen Sie, den folgenden Code:

var result = _tofiObjectList.Where(o => o.GetType() == mainObjType)
    .AsQueryable().Cast(relation.MainObject.EntityType).Where(relation.MainObject.Filter);

Dies ist eine Erweiterung Methode für IQueryable Typen:

public static IQueryable Cast(this IQueryable source, string type)
{
    switch (type)
    {
        case "TofiDataCollection.Service.TofiEntity.Obj":
            return source.Cast<Obj>();
    }
    return source;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top