如何从LINQ2SQL查询中获取可为空的项目?

时间:2011-04-20 14:45:12

标签: c# linq linq-to-sql

我有一个LINQ2SQL查询用于检索ID(PK,而不是null)。这是查询:

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的值?谢谢!

5 个答案:

答案 0 :(得分:3)

getPayeeID.First().GetValueOrDefault()

答案 1 :(得分:2)

如果你确信Payee_Id永远不会为null,那么只需输出值:

payeeID = (int)getPayeeID.First();

答案 2 :(得分:1)

由于值为int?,您可以使用int属性从中获取Value

payeeID = getPayeeID.First().Value;

int?Nullable<int>

的简写

答案 3 :(得分:1)

您可以使用FirstOrDefault()或将payeeID声明为int吗?然后根据需要使用它(如果它为null,你应该尝试做任何事情......)

答案 4 :(得分:-1)

您的实体的Payee_ID属性似乎可以为空,因为它代表数据库中的可空列。所以,你不应该在int中接收不可为空的值。你可以在nullable int中获得它的值,如。

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

var payeeID = payeeID = getPayeeID.FirstOrDefault(); 

稍后您可以使用

检查payeeID值是否为null
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
}