如何解决LINQ中的错误:数据为null或空

本文关键字:错误 数据 或空 null 何解决 解决 LINQ | 更新日期: 2023-09-27 18:08:18

我有以下代码。我想检查结果是否是null与if条件,但它总是显示一个错误。如何解决这个问题?

string StrRefNo = Request.QueryString["ref"];
string[] SMSid = StrRefNo.Split('$');
DownloadsDbEntities db = new DownloadsDbEntities();
var data = (from d in db.SMSLink_Expiry
    where d.RefNo == SMSid[0]
    && d.SMSLink.ID == Convert.ToInt32(SMSid[1])
    select d).ToList();
if (data.Count > 0)
{
    string ss = "yes";
}

在LINQ to Entities中不支持LINQ表达式节点类型'ArrayIndex'。

如何解决LINQ中的错误:数据为null或空

由于表达式不能翻译成SQL,因此将其从语句中拉出

string SMSId0 = SMSid[0];
int SMSId1 = Convert.ToInt32(SMSid[1]);
var data = (from d in db.SMSLink_Expiry
           where d.RefNo == SMSId0 
           && d.SMSLink.ID == SMSId1
           select d).ToList();

这应该可以解决您的问题:

string StrRefNo = Request.QueryString["ref"];
string[] SMSid = StrRefNo.Split('$');
var ref = SMSid[0];
var smsLinkId = Convert.ToInt32(SMSid[1]);
DownloadsDbEntities db = new DownloadsDbEntities();
var data = (from d in db.SMSLink_Expiry
            where d.RefNo == ref
            && d.SMSLink.ID == smsLinkId
            select d).ToList();
if (data.Count > 0)
{
     string ss="yes";
}

Linq不支持很多事情,因为它在内部将查询转换为SQL。

参考:在LINQ to Entities

中不支持LINQ表达式节点类型'ArrayIndex'

你可以试试:

 string[] SMSid = StrRefNo.Split('$');
 var refno=SMSid[0];
 var id=Convert.ToInt32(SMSid[1];
 DownloadsDbEntities db = new DownloadsDbEntities();
 var data = (from d in db.SMSLink_Expiry
 where d.RefNo == refno
 && d.SMSLink.ID == id)
 select d).ToList();