如何在选择linq to sql查询时使匿名类型属性可以为空

时间:2015-05-14 11:09:44

标签: c# linq-to-sql nullable

考虑这个简化的示例查询:

dt = (
  from O in ...
  ...
   select new
   {
      O.A,
      B = 0
   }).ToList().ToDataTable()

.ToDataTable()来自Convert generic List/Enumerable to DataTable?

假设表O没有名为B的属性,但我希望有一个名为B的列,其值将在稍后填写。这可以在B获取发送给它的数字值时正常工作,但我实际上想要发送int?个值,目前如果它发送null则会崩溃。

有没有办法选择新列(例如B),使其成为可空类型?

3 个答案:

答案 0 :(得分:2)

你可以这样做,

var testNull = (from student in studentList
                select new
                {
                    RollNo = default(int?),
                    Name = student.Name
                }).ToList();

但更好的是我们可以创建具体类型,而不是依赖于基于值的匿名类型。: - )

答案 1 :(得分:1)

由于推断出匿名类型成员的类型,因此它推断正确的事情:B = (int?)null

不确定你的意思"稍后填写"。如果您希望B是可变的,则需要创建一个类。

答案 2 :(得分:1)

尝试:

select new
{
    O.A,
    B = (int?)0
}