C# 如何使用LINQ进行内部联接
我有一个LINQ声明来检查是否有人正在输入凭证兑换的URL。我获得这张优惠券的方式是使用一个常规url,再加上一个散列的活动ID,称为my VoucherRedemption,如下所示C# 如何使用LINQ进行内部联接,c#,entity-framework,linq,C#,Entity Framework,Linq,我有一个LINQ声明来检查是否有人正在输入凭证兑换的URL。我获得这张优惠券的方式是使用一个常规url,再加上一个散列的活动ID,称为my VoucherRedemption,如下所示 if (Request.QueryString["voucherRedemption"] != null) { String VoucherRemption = Request.QueryString["voucherRedemption"]; MSCDatabaseDataContext MS
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();
这是非常危险的,因为它可以在任何时候返回默认值(也称为null)。数据库连接可能已失败,您超时,查询没有结果,或者根本不允许您访问数据库。当您尝试使用voucherCampaign时,All将导致空指针。尝试将其更改为以下内容:
它无法解决获得空值的原因。但至少您的应用程序不会在该函数中的空指针上崩溃。如果你想知道为什么你得不到回报,把firstrodefault改成firstrodefault,然后试着抓住它。catch块中的异常将包含有关查询为何不起作用的详细信息。
getCampaign.FirstOrDefault()
可能返回null。然后,VoucherCampaign.StartDate.ToString()
应该抛出空引用异常。@AmitKumarGhosh,但它昨天工作正常。现在我在“campaigname.Value=VoucherCampaign.campaigname;”处得到了异常,并且数据库中没有任何空值用于此操作。VoucherCampaign.campaigname
不应抛出。您在数据库中有与昨天相同的数据吗?@Alexander YES。这就是为什么它是投掷。但是,如果VocherCampaign在昨天起作用,它怎么可能是空的呢?只是没有意义。嘿@NickOtten,谢谢你的帮助和回复。但我发现了问题所在。当URL读取某些字符(如+和/)时,它会用它们的实际值替换它们。所以我只需要简单地替换一下我的担保。但是谢谢你的空检查,它也阻止了我的应用程序崩溃。你帮我解决了这个问题,谢谢。
var VoucherCampaign = getCampaign.FirstOrDefault();
if (VoucherCampaign == null) {
//print a error message here so you know soemthing is wrong
return;
}
//rest of your code