2

我已經開發了我的第一個API控制MVC4並通過腳手架我有它有自動輸出的項目列表:僅返回特定的屬性

// GET api/ItemList 
public IEnumerable<ItemOption> GetItemOptions() 
{ 
    var itemoptions = db.ItemOptions.Include(i => i.Item); 
    return itemoptions.AsEnumerable(); 
} 

這顯示了我的模型中的所有項目屬性:

public class ItemOption 
{ 
    public int ItemOptionId { get; set; } 
    public bool Active { get; set; } 
    public string Name { get; set; } 
    public string test1 { get; set; } 
    public double PriceNet { get; set; } 
} 

如何指定希望返回的特定字段?例如,我只想要返回ItemOptionId,Active和Name。

我已經嘗試添加其他包含,但這似乎是在對象級別。

+0

使用'itemoptions.AsEnumerable()。Select(...);' –

+0

是你的'ItemOptions'類comi從實體框架? – Habib

+0

@Habib是的,來自EF。 – Joseph

回答

2

嘗試創建一個新的類型來表示的屬性,你想退回:

public class ItemOptionResult 
{ 
    public int ItemOptionId { get; set; } 
    public bool Active { get; set; } 
    public string Name { get; set; } 
} 

然後伸出你的ItemOption集,這樣的:

// GET api/ItemList 
public IEnumerable<ItemOptionResult> GetItemOptions() 
{`enter code here` 
    var itemoptions = 
     db.ItemOptions 
      .Select(i => 
      new ItemOptionResult 
      { 
       ItemOptionId = i.ItemOptionId, 
       Active = i.Active, 
       Name = i.Name 
      }); 
    return itemoptions.AsEnumerable(); 
} 
+0

您不能從您的方法返回匿名類型IEnumerable。 – Habib

+0

@Habib你是對的,看我更新的答案。 –

+0

+1,這應該工作,因爲OP不能使用EF生成的類來投影結果。 – Habib

0

試試這個:

var itemoptions = db.ItemOptions.Select(io => new ItemOption() 
               { 
                ItemOptionId = io.ItemOptionId, 
                Active = io.Active , 
                Name = io.Name 
               } 
return itemoptions.AsEnumerable();