2011-05-25 2 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, но вы могли бы сделать:

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

Вы также можете перебирать SingleResult, как это:

var myFancyResult; 

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

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

You затем можно назвать результат в Хранимой процедуре, чтобы дать четкое изображение:

SELECT ISNULL(@Result, 0) AS Result 

ISNULL также гарантирует, что вам не нужно иметь дело с Nullables в C#.

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(); 
Смежные вопросы