问题描述
|
我有一个存储过程以这种格式返回数据:
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();
解决方法
我在ISingleResult上没有太多经验,但是您可以这样做:
int[] uniqueHotelIds = results.Select(x => x.HotelID).Distinct();
,您也可以像这样遍历SingleResult:
var myFancyResult;
ISingleResult<spResult> results = DataContext.sp();
foreach (var spResult in results)
{
myFancyResult = spResultin.NameOfColumn;
//Do something else with the data.
}
然后,您可以像这样在存储过程中命名结果,以给出清晰的画面:
SELECT ISNULL(@Result,0) AS Result
ISNULL
还可以确保您不必在C#中处理Nullables
。
,万一仍然有人需要答案:
注意:顾名思义,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();