检查项目是否为 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;
        }
    }
}

没有人必须回答这个问题,我只是想让大家知道。 :)我会试着弄清楚为什么会发生这种情况。:)

检查项目是否为 null 或表是否不包含任何匹配数据

项目使用.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。