将ObjectResult <int?>转换为List <int>

时间:2017-08-24 11:04:33

标签: c# .net entity-framework asp.net-web-api

我写了一个存储过程: -

CREATE PROCEDURE GET_USERSTORYDATA_EXISTS
    @MyWizardUserStoryId INT
   ,@ProjectId INT
   ,@StoryTitle NVARCHAR(MAX)
AS
BEGIN
    SET NOCOUNT ON;
    IF EXISTS (SELECT 1 FROM USERSTORY WHERE [MyWizardUserStoryId]=@MyWizardUserStoryId AND ProjectId=@ProjectId)
    BEGIN
        IF EXISTS (SELECT 1 FROM USERSTORY WHERE [MyWizardUserStoryId]=@MyWizardUserStoryId AND ProjectId=@ProjectId AND Title=@StoryTitle)
        BEGIN
            SELECT 0;
        END
        ELSE
         BEGIN
            SELECT 1;
        END
    END
    ELSE
         BEGIN
            SELECT 1;
        END

END
GO

我通过实体框架使用了这个程序: -

List<Int32>lst=context.GET_USERSTORYDATA_EXISTS(MyWizardUserStoryId,ProjectId,storyTitle);

但它给了我错误: -

Can not implicitly convert type 'ObjectResult<int?>' to List<int>

3 个答案:

答案 0 :(得分:6)

由于ObjectResult<T>实施IEnumerable<T>,您可以使用ToList。但是,您还需要从nullable int转换。最简单的方法是使用Linq Select然后ToList进行投影。此代码将使用零替换任何空值:

List<Int32> lst = context
    .GET_USERSTORYDATA_EXISTS(MyWizardUserStoryId, ProjectId, storyTitle)
    .Select(i => i.GetValueOrDefault(0))
    .ToList();

答案 1 :(得分:1)

要将对象结果转换为列表,我要添加一个ToList(),但在您的情况下,我不认为它会起作用,因为您只返回一个整数来自存储过程。

答案 2 :(得分:-3)

List<Int32?> list1 =new List<int?>() { 1, null, 2 };
                List<Int32> list2 = new List<int>();
                foreach (var item in list1)
                {
                    if (item.HasValue)
                        list2.Add(item.Value);
                }