我是.net的新手。我有一个表单,其中有两个组合框cbProduct
和cbBrandName
以及标签lblPrice
。
我正在尝试实现以下代码,但它向&&
显示蓝色涂鸦。
(错误:运算符'&&'不能应用于'lambda表达式'和'lambda表达式'类型的操作数)
我尝试了以下代码:(无法正常工作)
lblPrice.Text = string.Empty;
lblPrice.Text = doc.Descendants("items"
).Where((x => x.Element("productname"
).Value.Equals(cbProduct.SelectedItem.ToString())) && /*blue scribbles to '&&'*/
(y => y.Element("brandname").Value.Equals(cbBrandName.SelectedItem.ToString()
))).Select(k => k.Element("price"
).Value).ToString();
我的另一个问题是,我想将cbProduct
的选定值视为不同。以下代码采用所有值而不是不同的值:
cbProduct.Items.AddRange(doc.Descendants("items"
).Select(x => x.Element("productname").Value
).ToArray<string>());//adds all products
cbProduct.SelectedIndex = 0;
给出任何一个答案都可以
请帮助我
提前致谢
答案 0 :(得分:2)
看起来你正在将2个lambda传递给Where函数,并尝试将它们合并为逻辑和(&amp;&amp;)。你不能这样做。和&amp;&amp;必须发生在Where lambda内。或者你可以将2个函数链接在一起。像这样:
lblPrice.Text = doc.Descendants("items")
.Where(x => x.Element("productname").Value.Equals(cbProduct.SelectedItem.ToString()) &&
x.Element("brandname").Value.Equals(cbBrandName.SelectedItem.ToString()))
.Select(k => k.Element("price").Value).ToString();
我看到的另一个问题是你使用select结束查询,但实际上并没有枚举它。你可能想做这样的事情:
lblPrice.Text = doc.Descendants("items")
.Where(x => x.Element("productname").Value.Equals(cbProduct.SelectedItem.ToString()) &&
x.Element("brandname").Value.Equals(cbBrandName.SelectedItem.ToString()))
.Select(k => k.Element("price").Value)
.FirstOrDefault();
将返回您要查找的字符串,如果不存在则返回null(因此您可能希望在此情况下跳过最终的.ToString()调用,因为您已经从Select和.ToString()返回一个字符串在null上将抛出异常)。
答案 1 :(得分:1)
对于第一个问题,看起来您只想选择一个价格。假设.Single()
找到该项,此代码将起作用。否则会抛出,在这种情况下,您应该使用.SingleOrDefault()
并在找到的项目上检查null。
lblPrice.Text =
doc.Descendants("items")
.Single(x => x.Element("productname").Value == cbProduct.SelectedItem.ToString() &&
x.Element("brandname").Value == cbBrandName.SelectedItem.ToString())
.Element("price").Value;
对于第二个问题,您需要使用括号关闭.Select
,然后您可以调用.Distinct()
和.ToArray()
进行过滤以区分结果并将结果投影到{{1 }}。我还在那里抛出一个string[]
,因为没有什么比随机顺序的ComboBox更烦人了。试试这个:
.OrderBy()