2016-07-23 8 views
0

Wenn ich meine Endpunkt-API wie folgt definieren, die alle Spalten zurückgibt, funktionieren oData $ filter, $ Skip, $ filter einwandfrei.C# -Web-API oData Filter fehlgeschlagen

aber wenn ich nur bestimmte Spalten wie unten gezeigt auswählen, oData $ -Filter, $ Skip, $ Filter fehlschlagen. Irgendwelche Ideen?

public IQueryable<MyResult> GetMyLists() 
     { 
      return db.MyLists.Select(x => new MyResult 
      { 
       Trade_Name = x.Trade_Name, 
       price = x.price, 
       remarks = x.remarks, 
       Comment = x.Comment, 
       GenericGroupNumber = x.GenericGroupNumber 
      }); 
     } 

I definiert MyResult Klasse als:

public class MyResult 
    { 
     public string Trade_Name; 
     public decimal? price; 
     public string remarks; 
     public string Comment; 
     public string GenericGroupNumber; 

    } 

ist Jede mögliche Anleitung sehr geschätzt.

Antwort

0

Die Klasse MyResult hat keine Spalte [key] und wird nicht einer Tabelle im EDMX-Modell zugeordnet. Es wird als eine komplexe Entität (wie gespeicherte Prozedur) betrachtet. Sie können also $ filter nicht anwenden, $ skip.

0

OData ausgelegt ist, mit den Einheiten in der EDMX Modelldatei in der WebApiConfig.cs beschrieben zu arbeiten, Einrichtungen außerhalb davon wird nicht zulassen, dass Sie $ Filter anzuwenden, $ überspringen usw.

Sie müssen Definieren Sie diese Entität in Ihrem EDMX-Modell und platzieren Sie sie in einem eigenen Controller, der basierend auf dem Entitätsnamen benannt ist, damit er funktioniert.

class MyResultsController : ApiController { 
    public IQueryable<MyResult> GetMyResults() 
    { 
     return db.MyLists.Select(x => new MyResult 
     { 
      Trade_Name = x.Trade_Name, 
      price = x.price, 
      remarks = x.remarks, 
      Comment = x.Comment, 
      GenericGroupNumber = x.GenericGroupNumber 
     }); 
    } 
} 

Dann stellen Sie sicher, MyResult korrekt in der WebApiConfig kartieren.

Verwandte Themen