2014-01-11 53 views
2

Im新的.Net Web API。Asp.Net web api - 如何獲取所有記錄

我想獲取所有CreatedBy = 1(這不是主鍵)的記錄。

我的模型

public class Subject 
{ 
    [Key] 
    public int Id { get; set; } 
    public int UniId { get; set; } 
    public bool IsActive { get; set; } 
    public string Name { get; set; } 
    public string Code { get; set; } 
    public int CreatedBy { get; set; } 
    public int UpdatedBy { get; set; } 
} 

我在控制器get方法

public Subject Get(int id) 
    { 
     IQueryable<Subject> query; 
     return query = from Subjects in db.SubjectContext.Where(v => v.CreatedBy == id).ToList(); 
    } 

回答

5

主要問題是你Get方法在Controller是設置返回一個Subject對象,而不是List<Subject>。您的查詢看起來正確。

主要的變化將需要如下

public List<Subject> Get(int id) 
{ 
    IQueryable<Subject> query; 
    return query = from Subjects in db.SubjectContext.Where(v => v.CreatedBy == id).ToList(); 
} 

在一個側面說明,變量名id是模糊的。使用諸如createdById之類的東西,乍看之下將向臨時觀察者指示id變量代表創建許多Subjects而不是Subject的編號的用戶。

而且,我會說同樣的方法名稱Get ...得到什麼?獲取也太接近屬性聲明中使用的C#關鍵字get。它應該更具描述性。只是幾個簡單的注意事項,不會影響你的問題:)

最後我會注意你從函數返回的方式是非正統的,雖然技術上是正確的,將編譯。你可以跳過變量賦值在return語句甚至完全使用可變跳過,就回到了List<Subject> ..我還添加了using語句一個DataContext這是最好的做法:

public List<Subject> Get(int id) 
{ 
    using(var context = new YourDataContext()) 
    { 
     var queryResult = (from Subjects in db.SubjectContext.Where(v => v.CreatedBy == id)).ToList(); 
     return queryResult; 
    } 
} 

或者沒有LINQ語句,

public List<Subject> Get(int id) 
{ 
    using(var context = new YourDataContext()) 
    { 
     return context.Subjects.Where(v => v.CreatedBy == id)).ToList(); 
    } 
} 
+0

關於變量名,請注意Web API綁定路由字典中的id變量,所以名稱需要匹配路由模板。 –

+0

這很好用!說如果我只想在其中的幾個領域..我怎麼能改變它? 我修改過的LINQ查詢 - var queryResult = context.SubjectContext .Where(x => x.CreatedBy == CreatedBy) .Select(x => new Subject {x.Id,x.Name}); – user2412230

+0

@ user2412230你在正確的軌道上。您的代碼應該可以工作,因爲您使用的是匿名類型。您還可以定義一個只包含所需字段的類,並在.Select()調用中實例化該類。如果需要,這可以更容易地傳遞給其他方法等。 –