将Generic.List <int?>转换为Generic.List <int> </int> </int?>

时间:2014-09-23 17:47:16

标签: c# linq stored-procedures

我从存储过程返回结果集。它是一个发送回整数列表的临时表。

当我尝试返回结果时,我收到错误Generic.List<int?> to Generic.List<int>

这就是我正在尝试的:

using (SecurityEntities ctx = new SecurityEntities())
{
    List<int> newList = ctx.spStoreSearch(storeNumber).Where(x => x != null).Select(x => x).ToList();
   return test;
}

ctx.spStoreSearch(storeNumber).Where部分下面显示Method, Delegate or event is expected

我根据我目前在this answer

上所做的事情

我的错误可能在存储过程本身吗? 这就是我从storedProc select * from @TempTable

返回的内容

3 个答案:

答案 0 :(得分:14)

选择Nullable int的值,如:

.Select(x => x.Value)

您也可以像以下一样进行投射:

.Select(x => (int) x)

您的查询可能是:

List<int> newList = ctx.spStoreSearch(storeNumber)
                        .Where(x => x.HasValue)
                        .Select(x => x.Value).ToList();

您收到异常是因为List中的元素属于int?Nullable<int>类型,因此当您执行Select(x=> x)时,它会选择{{1}类型的项目并且您无法将其分配给int?

答案 1 :(得分:0)

您有两个选项,您可以将您拥有的可空整数转换为0(或您决定选择的任何其他数字),并将它们包含在列表中,或者您可以将它们过滤掉......

List<int?> nullableInts = new List<int?>();

// Lets generate some data to play with...
for (int i = 0; i < 100; i++)
{
    int? digit = i % 2 == 0 ? (int?)null : i;
    nullableInts.Add(digit);
}

// Below we use the GetValueOrDefault method to convert all null integers to -1
List<int> ints = nullableInts.Select(x => x.GetValueOrDefault(-1)).ToList();

// Below we simply cast the nullable integer to an integer
List<int> filteredInts = nullableInts.Where(x => x.HasValue)
                                     .Select(x => (int)x).ToList();

答案 2 :(得分:0)

选择所有非空值并将它们添加到整数列表中(使用value属性过滤掉)。

//select int list
var nullableListIds = nullableListRecords.Select(o => o.ID).ToList();

//create list
var intList =  nullableListIds.Where(n => n != null).Select(n => n.Value).ToList();