2011-11-04 8 views
6

言って、私は3つの顧客の名前を持っている含まれています:LINQのはSTARTSWITH順は、

A third customer called Microsoft 
Another customer also called Microsoft 
Microsoft 

私が望むのは、Microsoftが「Microsoft」で始まるという事実に基づいて最初に取得することです。

変更すると、当然のことながらSTARTSWITHに入って1つの結果の代わりに、3

で私を残し、これは単一のクエリで行うことができますか?

+0

私はそうは思わない、ほとんどの場合、重み付きフルテキストクエリを使用する必要があります。 – Sam

+0

@Sam - 全文検索を中止しました。それは、検索で空白を使用すると私に頭痛を与えました。 – Malako

答えて

14

たぶん

var q = (from cust in db.Cust 
        where cust.Name.Contains("Microsoft") 
        orderby cust.Name.IndexOf("Microsoft"), 
          cust.Name.Length ascending 
        select cust) 
+0

すごく速かった!エレガント! – Malako

+0

これはあなたの問題の非常に良い解決策です。 –

3

あなたは試合の割合で注文することができます。

orderby "Microsoft".Length * 1.0/cust.Name.Length 

これはちょうどマイクロソフトのための100%をもたらすであろうし、他の試合のためにはるかに少ないです。

+0

a Microsoftは、このような方法でMicrosoftBと同じ重みを得る。 –

+0

興味深い解決策。しかし、降順を追加する必要があります。いいぞ! – Malako

+0

@バレンタイン - そうです。私はあなたの解決策に固執します。 – Malako

関連する問題