从ISingleResult获取唯一数据

时间:2011-05-25 18:21:06

标签: c# asp.net linq linq-to-sql

我有一个以这种格式返回数据的存储过程:

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();

3 个答案:

答案 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();