检查项目是否为 null 或表是否不包含任何匹配数据
本文关键字:是否 包含任 何匹配 数据 项目 null 检查 | 更新日期: 2023-09-27 18:35:42
我有这个查询,我试图检查表中是否有与变量tareTotal
中的字符串值匹配的项目TruckItems
。
public QuoteResult GetTruckInformation(QuoteData data)
{
QuoteResult qr = null;
using (TruckDb db = new TruckDb())
{
var tareTotal = db.ChassisModel.Where(x => x.Id == data.ChassisId).FirstOrDefault();
var items = (from x in db.TruckItems where x.Model == tareTotal.Name select x); //Issue lies here
if (items.Any()) //Error here
{
var truckTareTotal = db.TruckItems.Where(x => x.Model == tareTotal.Name).FirstOrDefault().TareTotal;
var truckGVM = db.TruckItems.Where(x => x.Model == tareTotal.Name).FirstOrDefault().GVM;
var list = new QuoteResult
{
TareTotal = Convert.ToDouble(truckTareTotal),
GVM = Convert.ToDouble(truckGVM)
};
qr = list;
}
}
return qr;
}
我在if (items.Any())
收到错误:
非静态方法需要一个目标。
我不完全了解我的问题,我找不到任何可以帮助我解决问题的东西。有人可以给我一些关于我的变量items
做错了什么的指示吗?谢谢!
编辑:
感谢大家对我的帮助!您的所有编码都运行良好。我发现了我的问题,出于某种原因,它与线程有关......
在我的客户端应用程序中,我在组合框选择更改事件中使用了 GetTruckInformation
方法,并且由于某种原因,当它通过该事件运行时,我的服务器端应用程序会更改我所有语句之间的线程,从而导致我的所有数据都被null
。
这是我的WPF/客户端方法,仅用于展示:
private async void cmbChassisModel_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
using (TruckServiceClient service = new TruckServiceClient())
{
QuoteData data = new QuoteData();
data.ChassisId = cmbChassisModel.GetDisplayItemId();
var items = await service.GetTruckInformationAsync(data);
if (items != null)
{
lblTareTotalAmount.Content = items.TareTotal;
lblGVMAmount.Content = items.GVM;
}
}
}
没有人必须回答这个问题,我只是想让大家知道。 :)我会试着弄清楚为什么会发生这种情况。:)
对
项目使用.ToList()
。喜欢这个:
var items= db.TruckItems.Where(w=>w.Model == tareTotal.Name).ToList();
否则,执行.Any()
时可能会遇到麻烦
编辑:
只是为了过期。这样做:
if(tareTotal==null)
throw new Exception("The tare total is null");
var items= db.TruckItems.Where(w=>w.Model == tareTotal.Name).ToList();
如果没有项目与db.ChassisModel.Where(x => x.Id == data.ChassisId)
匹配,则tareTotal
将为空。
无论如何,如果您只想检查是否db。卡车物品包含tareTotal.Name
与否,请使用这个。这也提高了性能:
改变:
var items = (from x in db.TruckItems where x.Model == tareTotal.Name select x);
if (items.Any())
自:
if(db.TruckItems.Any(x => x.Model == tareTotal.Name))
检查此优化方法:
public QuoteResult GetTruckInformation(QuoteData data)
{
QuoteResult qr = null;
using (TruckDb db = new TruckDb())
{
var tareTotal = db.ChassisModel.Where(x => x.Id == data.ChassisId).FirstOrDefault();
if (tareTotal != null)
{
var item = db.TruckItems.Where(x => x.Model == tareTotal.Name).FirstOrDefault();
if (item != null)
{
var list = new QuoteResult
{
TareTotal = Convert.ToDouble(item.TareTotal),
GVM = Convert.ToDouble(item.GVM)
};
qr = list;
}
}
}
return qr;
}
简单:
var hasItems = (from x in db.TruckItems where x.Model == tareTotal.Name select x).Any();
如果您至少有一件符合您条件的商品,则为 true。