2011-05-25 120 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();