我对linq很陌生,很难创建一个查询。 我有一个'Customers'表和'Orders'表,一对多的关系。 如何选择那些在订单描述中拥有“特殊”一词的最早订单的客户?Linq查询问题(一对多,子对象属性过滤器)
如果最早的订单不包含这个词,客户不应该在结果中。如果客户没有订单,他不应该在结果中。换句话说,只有那些有订单且最老的订单中有'特殊'字样的客户应该在那里。
我希望我很清楚,谢谢。
我对linq很陌生,很难创建一个查询。 我有一个'Customers'表和'Orders'表,一对多的关系。 如何选择那些在订单描述中拥有“特殊”一词的最早订单的客户?Linq查询问题(一对多,子对象属性过滤器)
如果最早的订单不包含这个词,客户不应该在结果中。如果客户没有订单,他不应该在结果中。换句话说,只有那些有订单且最老的订单中有'特殊'字样的客户应该在那里。
我希望我很清楚,谢谢。
公共静态列表<客户> SampleSelect(名单<客户>客户端)
{
回报clients.Where(C = > c.Orders.Count &
c.Orders.OrderBy(O = > o.Date)
.FirstOrDefault()。Description.Conta插件( “特殊”))ToList()。
}
//固定排序,日Thnx瑞安Versaw
这是一个快速的猜测,推测我可以从你的问题。它可能会或可能不准确:
var dc = new MyDataContext();
var qry = from customer in dc.Customers
where customer.Orders.Description.Contains("special")
&& customer.Orders.OrderDate > myMinDate
&& customer.Orders.OrderDate < myMaxDate
order by customer.Orders.OrderDate ascending
select customer;
它应该返回通过的订单日期,由最小和最大日期过滤排序Customer对象。如果您不想按日期过滤,则可以删除这两行。
期望客户重复。如果您需要不重复,请添加一个group by子句。
祝你好运,报告它的效果如何。 :)
编辑:
谢谢,Randolpho,问题是,我没有myMinDate和myMaxDate。我需要能够检查最旧订单的描述。我觉得我应该使用类似于c.Orders.Where(x => x.OrderDate.Max())的地方,但不能正确地组成整个查询。谢谢。 - 瓦伦丁·瓦西里耶夫
嗯......我不能,如果你想用最古老的秩序,从客户,你要检查描述或如果你想与最古老的订单,客户告诉在订单描述中有“特殊”一词。
如果你想用最古老的订单的客户,然后要检查的描述,你应该做这样的事情:
var qry = from customer in dc.Customers
order by customer.Orders.OrderDate ascending
select new
{
CustomerData = customer,
OrderDescription = customer.Orders.Description
};
var oldest = qry.First();
if(oldest.OrderDescription.Contains("special"))
{
// do something
}
在这种情况下,最古老的是,有两个字段创建新的匿名类型, CustomerData包含具有最旧订单的客户,OrderDescription包含最早订单的描述字段。
另一方面,您可能需要包含单词“special”的最早订单。在这种情况下,你应该做这样的事情:
var qry = from customer in dc.Customers
where customer.Orders.Description.Contains("special")
order by customer.Orders.OrderDate ascending
select customer;
var oldestCustomerWithSpecial = qry.First();
在这种情况下,与包含在描述中的“特殊”二字最早的记录的客户是在名为oldestCustomerWithSpecial变量。
我不认为在OrderDate上使用Max会帮助你。使用按日期TOP 1查询的订单几乎总是更好。在查询上调用First()会做到这一点。
谢谢,Randolpho,问题是,我没有myMinDate和myMaxDate。我需要能够检查最旧订单的描述。我觉得我应该使用类似于c.Orders.Where(x => x.OrderDate.Max())的地方,但不能正确地组成整个查询。谢谢。 – Valentin 2009-07-22 14:36:30
我的情况是第一个。不幸的是,它不能编译,我无法在这里访问OrderDate:由customer.Orders.OrderDate升序, ,因为Orders是一个集合。 – Valentin 2009-07-22 16:06:46