所以我有点卡住了!做大学的编程工作,我碰壁了。
我们在其中一个部分提出的问题如下:
“2。 允许用户查找在特定年份下订单的客户。提供一个 组合框,列出用户可以从中订购表中的所有唯一(不同)年份 做出选择。“
我在转换“年份”时遇到问题,因此我可以将其与OrderID进行比较,并在列表框中显示数据库中的所有订单。
如果有人能帮我一把,我将不胜感激! 谢谢!
这是我的代码:
private void dateDDL_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
string selection;
selection = dateDDL.SelectedItem.ToString();
var year = from y in northwind.Orders
where Convert.ToString(y.OrderDate).Contains(selection)
select y.OrderID;
var order = from o in northwind.Order_Details
where o.OrderID == year
select new { o.OrderID,
o.ProductID,
o.UnitPrice,
o.Quantity,
o.Discount };
lbxOrderdate.ItemsSource = order;
}
答案 0 :(得分:4)
var year = (from y in northwind.Orders
where Convert.ToString(y.OrderDate).Contains(selection)
select y.OrderID).Single();
var order = from o in northwind.Order_Details
where o.OrderID == year
select new {
o.OrderID,
o.ProductID,
o.UnitPrice,
o.Quantity,
o.Discount
};
LINQ查询还会返回System.Linq.IQueryable<T>
,如果您想获取单个值,则应该Single()
/ First()
扩展名。
如果您不确定该查询结果是否包含对象,那么您应FirstOrDefault()
或SingleOrDefault()
(SingleOrDefault()
在集合仅包含一个元素时抛出异常),返回{{ 1}}以防结果中没有元素。请注意这一点。
答案 1 :(得分:3)
您的year
查询返回了与您的OrderID
子句匹配的所有where
值的列表。您无法将该列表与o.OrderID
查询中的单个order
进行比较;如果您想查找years
查询返回的所有订单中的所有订单,请使用类似
where year.Contains(o.OrderID)
(未经测试,但应该引导你走正确的路线)
答案 2 :(得分:1)
类型非常重要,(除此之外)字符串的世界并不安全。
string selection = dateDDL.SelectedItem.ToString();
int year = Int32.Parse(selection);
var orders =
from order in northwind.Orders
where order.OrderDate.Year == year
select order;
“2.允许用户查找在特定年份下订单的客户。提供一个组合框,列出订单表中用户可以进行选择的所有唯一(不同)年份。”< / p>
嗯,查询实际上不应该是关于客户的吗?