我已经得到了这个查询,我试图检查表TruckItems
中是否有与变量tareTotal
中的字符串值匹配的项目。
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 /客户端方法,仅用于show:
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;
}
}
}
没有人必须回答这个问题,我只是想让每个人都知道。 :)我会试着找出为什么会这样。 :)
答案 0 :(得分:2)
在项目上使用.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();
答案 1 :(得分:1)
如果没有与db.ChassisModel.Where(x => x.Id == data.ChassisId)
匹配的项目,则tareTotal
将为空
无论如何,如果你只想检查db.TruckItems是否包含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))
答案 2 :(得分:1)
检查此优化方法:
<p>Simple XML will return a reference to an <i>object</i> containing:<p>
<blockquote>the node value and you cant use references in session variables</blockquote>
<p>as there is <b>no feasible</b> way to restore a reference to another variable.</p>
答案 3 :(得分:0)
简单:
var hasItems = (from x in db.TruckItems where x.Model == tareTotal.Name select x).Any();
如果你有至少一个符合你条件的物品,那将是真的。