2011-04-20 51 views
0

我有一个LINQ2SQL查询来检索一个ID(PK,非空)。查询:如何从LINQ2SQL查询中获得可为空的项目?

int masterEntityID; 
int payeeID; 
int chargePayeeID; 
try 
{ 
    using (TestDataContext os = new TestDataContext()) 
    { 
     string entityName = tbSearch.Text; 

     var getMasterID = from r in os.Entities 
          where r.Name == entityName 
          select r.ID; 

     masterEntityID = getMasterID.First(); //this is working FINE! 

     var getPayeeID = from pid in os.Entities 
         where pid.Name == entityName 
         select pid.Payee_ID; 

     payeeID = getPayeeID.First(); //This is giving me an err: Cannot implicitly convert type 'int?' to 'int'. An explicit conversion exists (are you missing a cast?) 



    }; 

数据类型:ID和Payee_ID都是int。但ID是Pkey,Payee_ID不是!

如何将getPayeeID的值转换为payeeID?谢谢!

+0

可能重复[如何从 '可空' 返回 '的Guid' ?](http://stackoverflow.com/questions/5668673/how-to-return-a-guid-from-a-nullableguid) – 2011-04-20 14:57:59

回答

3
getPayeeID.First().GetValueOrDefault() 
速记210
+0

这是最好的(最安全)的选择,只要你很高兴有价值当返回空值时设置为0编辑。忘记了这种方法。 – 2011-04-20 14:57:48

+0

谢谢安迪!这工作:) – 2011-04-20 15:04:17

+0

GetValueOrDefault应该返回null如果Payee_ID是可为空的属性或即时消息丢失的东西 – 2011-04-20 15:05:17

2

如果您确信Payee_Id永远不会为空,然后只投值:

payeeID = (int)getPayeeID.First(); 
1

由于该值int?可以使用Value财产从它那里得到的int

payeeID = getPayeeID.First().Value; 

int?Nullable<int>

1

您可以使用FirstOrDefault()或将payeeID声明为int吗?然后根据需要使用它(如果它为空,则应该尝试执行任何操作......)

-1

似乎实体的Payee_ID属性为空,这是因为它表示数据库中的可为空的列。所以,你不应该在int中接受它的值,而这个值是不可空的。你可以像null那样得到它的值。

int? payeeID = payeeID = getPayeeID.FirstOrDefault(); 

var payeeID = payeeID = getPayeeID.FirstOrDefault(); 

后,你可以检查是否payeeID值为空或不使用的

if(payeeID.HasValue) 
{ 
     int x = payeeID.Value; //Value property of nullable int is an integer value and accessing it would through exception if HasValue property is false 
} 
+0

FirstOrDefault将返回可为空的类型的默认值一片空白。因此,如果getPayeeId的第一项为空,它将返回0。 – 2011-04-20 15:57:19

+0

默认(int?)为null不是0 – 2011-04-20 16:10:10