2015-11-05 51 views
1

我有一个LINQ语句来检查,如果有人输入URL的凭单赎回。我得到这张优惠券的方式是使用一个普通的URL,带有一个额外的散列CampaignID,它被称为我的VoucherRedemption,如下所示。如何做一个内部连接使用LINQ

if (Request.QueryString["voucherRedemption"] != null) 
{ 

    String VoucherRemption = Request.QueryString["voucherRedemption"]; 
    MSCDatabaseDataContext MSCDB2 = new MSCDatabaseDataContext(); 
    var getCampaign = from campaign in MSCDB2.Tbl_Campaigns 
         where campaign.Link.Contains(VoucherRemption) 
         select campaign; 

    var VoucherCampaign = getCampaign.FirstOrDefault(); 


    campaignName.Value = VoucherCampaign.CampaignName; 
    campaignDescription.Value = VoucherCampaign.CampaignDescription; 
    txtStartDate.Text = VoucherCampaign.StartDate.ToString(); 
    txtDateEnd.Text = VoucherCampaign.EndDate.ToString(); 
    campaignAudience.Value = VoucherCampaign.Target.ToString(); 
    txtDiscount.Text = VoucherCampaign.Discount.ToString(); 
    txtTsCs.Text = VoucherCampaign.TermsConditions; 
    txtTsCs.ReadOnly = true; 
    CalendarExtender1.Enabled = false; 
    CalendarExtender2.Enabled = false; 
    txtStartDate.ReadOnly = true; 
    txtDateEnd.ReadOnly = true; 
    txtDiscount.ReadOnly = true; 
    txtEmail.Visible = true; 
} 

现在,我不断收到一个:

System.NullReferenceException:对象不设置到对象的实例。

但奇怪的是,是昨天它工作。但只有昨天。其他日子不是。不是它回到了被打破。有没有办法解决这个问题?

编辑:我检查了文章,仍然不能似乎发现问题。它是后

var VoucherCampaign = getCampaign.FirstOrDefault(); 

这是非常危险的,因为它可以随时返回默认(又名空)昨天工作

+0

'getCampaign.FirstOrDefault()'可能返回null。然后'VoucherCampaign.StartDate.ToString()'应该抛出这个空引用异常。 –

+0

@AmitKumarGhosh但昨天工作正常。现在我在“campaignName.Value = VoucherCampaign.CampaignName;”处得到异常并且这里没有DB中的任何空值。 –

+0

'VoucherCampaign.CampaignName'不应该抛出。 –

回答

1

你不必空检查。数据库连接可能失败,你有超时,没有你的查询结果,或者你只是不允许访问数据库。当您尝试使用voucherCampaign时,所有这些都会导致空指针。尝试改变它是这样的: 。

var VoucherCampaign = getCampaign.FirstOrDefault(); 
if (VoucherCampaign == null) { 
//print a error message here so you know soemthing is wrong 
return; 
} 
//rest of your code 

它不会解决,为什么你得到一个空的原因。但至少你的应用程序不会在这个函数中的空指针上崩溃。如果你想知道为什么你没有得到回报,将第一次错误改为第一次,然后试着绕过它。 catch块中的异常将包含更多关于为什么查询不起作用的信息。

+0

嘿@NickOtten,感谢您的帮助和回复。但我想出了问题。当URL读取+和/等特定字符时,它将用它们的实际值替换它们。所以我只需要在我的VoucherRedemption Querystring上做一个简单的替换。但是,感谢Null检查,它也会阻止我的应用程序崩溃。你帮我解决了这个问题,谢谢。 –