以前:在this question有人告訴我如何使用CompareTo返回按照字母順序使用LINQ to Objects命令的特定範圍內的姓氏。返回從Linq到Top對象的Top X結果按順序查詢
我的問題的其餘部分,似乎已經錯過了最初的問題,要求喂狂熱,實際上是在我測試這個解決方案後出現的。在前面的eaxample我有名字的列表:
Adams Bentham Bickford Gillies Kelly Moore Peters Rutherford Smith Taylor Williams
,我想能夠查詢他們對所有吉利斯和摩爾的名字,例如並獲得:
Gillies Kelly Moore
這是所有好,如果你想讓每一個單獨的名字在球門柱之間回來,那麼無論如何。例如,如果您有大量姓氏,並且您希望Gillies和Taylor之間的名稱最多有四個按字母順序返回,則問題出現。
因此所需的輸出是:
Gillies Kelly Moore Peters
不過只是返回吉利斯和泰勒之間的四個結果可能返回凱利,彼得斯,史密斯和泰勒,或吉利斯,摩爾,盧瑟福和史密斯。基本上,查詢會引導您根據自己的意思選擇球門柱之間的任何舊四。
那麼,我怎樣才能得到前4名的結果按字母順序。我可以寫第二個查詢當然返回一個子集,然後從中選擇...但不應該有一種方法將此行爲集成到初始查詢中?
我已經用OrderBy嘗試了幾件事情,到目前爲止他們只是不工作。所以這一切都結束了你們。
編輯:對於那些建議使用「take」的人,我已經在使用take。即使您使用OrderBy或至少它不在我的查詢中,它也不會按順序「接受」。這是:
var allIDs = (from cust in dc.orders
join item in dc.order_items on cust.orderid equals item.orderid
join del in dc.deliveries on cust.deliveryid equals del.deliveryid
join dt in dc.deliverytypes on del.deliverytype equals dt.deliverytypeid
where eventcode == item.itemcode
&& dt.description == "Secure Post"
&& (cust.status == "OK" || cust.status == "PB")
&& cust.surname.CompareTo(surfrom ?? " ") >= 0
&& cust.surname.CompareTo(surto ?? "zzz") <= 0
&& (cust.trackingcode == null ? false : (bool)cust.trackingcode)==false
orderby cust.surname, cust.initials, cust.ordercode
select cust.orderid).Distinct().Take(ordermax);
這只是返回四個名稱之間的名稱,而不是特定的四個名稱。
最終的延伸形式,我投降了,並寫了一個複雜的LINQ語句來選擇這種格式列表中,英文縮寫和姓氏,然後第二個查詢執行採取要求。仍然會很高興從一個查詢返回id列表*聳聳肩* – bert 2010-07-12 10:55:13