我有一个以这种格式返回数据的存储过程:
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();
答案 0 :(得分:1)
我对ISingleResult没有太多经验,但你能做到:
int[] uniqueHotelIds = results.Select(x => x.HotelID).Distinct();
答案 1 :(得分:1)
你也可以像这样迭代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
。
答案 2 :(得分: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();