我想设置一个类型为" ReturnOrderDetailLine"为特定的"ReturnOrderDetailLine"在一个Observable collection中的"ReturnOrderDetailLine">
识别我感兴趣的元素是通过搜索条形码完成的
public ObservableCollection<ReturnOrderDetailLine> ReturnLines
{
get => returnLines;
set
{
returnLines = value;
OnPropertyChanged(nameof(ReturnLines));
}
}
public ReturnOrderDetailLine SelectedLine { get; set; }
protected override void UpdateBarcodePickedOrReturnedQty(string barcodeText)
{
var returnDetailLine = (ReturnOrderDetailLine)ReturnLines.Where(s => s.Barcode.Equals(barcodeText));
SelectedLine = returnDetailLine;
OnPlusCommand();
}
我尝试过使用搜索方法,如。select()或。where(),但似乎这些函数的输出是相同的。
我已经尝试将。where()的结果转换为我想要的类型,但我收到一个"指定的转换无效";错误。
我已经在谷歌上搜索了大约一个小时,但没有得到任何见解。
有人有什么想法吗?
有多种方法可以满足您的需求:
FirstOrDefault()
:返回可能存在多个的第一项(如果不存在则默认)。First()
:返回可能存在多个的第一项(如果不存在则抛出异常)。SingleOrDefault()
:假设有一个项目并返回它(如果不存在则默认)。如果有多个项目违反合约,则抛出异常。Single()
:假设有一个单独的项目并返回它(或者如果不存在则抛出异常)。如果有多个项目违反合约,则抛出异常。
下面是在您的场景中使用FirstOrDefault()
方法的示例:
ReturnOrderDetailLine item = ReturnLines.FirstOrDefault(s => s.Barcode.Equals(barcodeText));
更多关于FirstOrDefault()
,First()
,SingleOrDefault()
和Single()
之间的差异可以在这个有用的stackoverflow答案中找到。