2011-05-25 126 views
0

獨特數據我有一個存儲過程,在這種格式返回數據:充分利用ISingleResult

HotelID | Price 
--------------------- 
1 | 20 
1 | 30 
2 | 25 
4 | 40 
4 | 50 

我得到的結果如下所示:

ISingleResult<spResult> results = DataContext.sp(); 

我想獲得基於從存儲過程返回的數據的酒店列表。喜歡的東西:

int[] uniqueHotelIds = GetUniqueHotelIdsFromResults(results); 

List<Hotel> hotels = (from h in DataContext.Hotels 
         where uniqueHotelIds.Contains(h.HotelID) 
         select h).ToList(); 

回答

1

我沒有與ISingleResult太多的經驗,但你可以這樣做:

var myFancyResult; 

ISingleResult<spResult> results = DataContext.sp(); 

foreach (var spResult in results) 
{ 
    myFancyResult = spResultin.NameOfColumn; 
    //Do something else with the data. 
} 

您:

int[] uniqueHotelIds = results.Select(x => x.HotelID).Distinct(); 
1

您也可以通過SingleResult這樣的迭代可以這樣命名存儲過程中的結果,以便給出清晰的圖像:

SELECT ISNULL(@Result, 0) AS Result 

ISNULL還確保您不必在C#中處理Nullables

0

在任何人的情況下仍然需要回答:

注:ISingleResult,顧名思義,會返回一個結果。在下面的代碼塊中,它將生成的SP調用映射到「resultObject」類。第二行給出了帶參數的相同代碼的示例。然後你想檢查並確保它不是空的(取決於你的SP)。

ISingleResult<spResult> results = DataContext.sp(); 
var newObject = results.Select(r => new resultObject()).SingleOrDefault(); 
// or 
var newObject = DataContext.sp().Select(r => new resultObject()).SingleOrDefault(); 
// with parameters 
var newObject = DataContext.sp(id, count).Select(r => new resultObject(id, count)).SingleOrDefault();