如何从LINQ2SQL查询中获取可空项

本文关键字:获取 查询 LINQ2SQL | 更新日期: 2023-09-27 17:51:22

我有一个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的值?谢谢!

如何从LINQ2SQL查询中获取可空项

getPayeeID.First().GetValueOrDefault()

如果您确信Payee_Id永远不会为空,那么只需强制转换值:

payeeID = (int)getPayeeID.First();

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

payeeID = getPayeeID.First().Value;

int?Nullable<int>

的简写

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

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

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
}