5

所以我有点卡住了!为大学做编程作业,我碰壁了。

我们在其中一个部分中提出的问题如下:

“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;
}  
4

3 回答 3

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()当集合仅包含一个元素时抛出异常),default(T)如果结果中没有元素,则返回。请注意这一点。

于 2013-04-19T14:38:34.417 回答
4

您的year查询将返回与您的子句OrderID匹配的所有值的列表。where您无法将该列表与查询中的单个列表进行o.OrderID比较order;如果您想查找years查询返回的某一年中的所有订单,请使用类似

where year.Contains(o.OrderID)

(未经测试,但应该引导您走上正确的道路)

于 2013-04-19T14:41:35.507 回答
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. 允许用户查找在特定年份下订单的客户。提供一个组合框,列出订单表中所有唯一(不同)年份,用户可以从中进行选择。”

嗯,查询不应该是关于客户的吗?

于 2013-04-21T05:19:49.227 回答