2012-12-02 72 views
3

我有以下代碼:IEnumerable的回報首先

public IEnumerable<Report> GetReport(int reportId) 
    { 
     var dbReport = dbContext.ReportsTbl.Where(w =>w.ID == reportId); 
     return dbReport; 

    } 

我喜歡做的事,雖然我們得到第一

如果我做的:

public IEnumerable<Report> GetReport(int reportId) 
    { 
     var dbReport = dbContext.ReportsTbl.First(w =>w.ID == reportId); 
     return dbReport; 
    } 

我如何得到它先做()。它抱怨它是IEnumerable。

+0

嘗試使用FirstOrDefault()方法,如果在空列表或空列表上使用First()方法,則會得到異常 – Jacek

+0

@Jacek如果必須至少有一個,則可以使用First()。在列表中使用'FirstOrDefault()'將會拋出一個'NullReference'異常 – Silvermind

回答

4

你需要改變方法簽名返回,而不是一個集合只有一個目標:

public Report GetReport(int reportId) 
{ 
    var dbReport = dbContext.ReportsTbl.First(w =>w.ID == reportId); 
    return dbReport; 
} 

如果由於某種原因,你真的想只包含的第一個元素的集合,你可以使用.Take(1)代替First

2

First返回類型爲Report的第一個元素。由於它只是一個項目,它不返回一個枚舉。

你有兩個選擇:

public Report GetReport(int reportId) 
{ 
    var dbReport = dbContext.ReportsTbl.First(w =>w.ID == reportId); 
    return dbReport; 
} 

這個例子將返回,而不是報告一堆(可枚舉)只是一個報告。

public IEnumerable<Report> GetReport(int reportId) 
{ 
    var dbReport = dbContext.ReportsTbl.Where(w =>w.ID == reportId).Take(1); 
    return dbReport; 
} 

這個例子將只返回一個報告,但它將被封裝在一個枚舉中。你可以把它看作是一組只有一個報告。