我對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