1

object (KS)保持するがありますID and Title(タイトルの一部として数字があります)。

私がやろうとしているのは、降順に並べ替えることだけです。オブジェクトには次のものがあります。

ID    Title
1     1 Outlook VPN 
2     2 Outlook Access
3     4 Access VBA
4     3 Excel Automation

したがって、タイトルで並べ替えると、次のようになります。

ID    Title
3     4 Access VBA
4     3 Excel Automation
2     2 Outlook Access
1     1 Outlook VPN 

ソートに使用しているコードは次のとおりです。

IEnumerable<KS> query = results.OrderByDescending(x => x.Title);

ただし、クエリにはまだオブジェクトが元の順序で含まれています!

欠落しているタイトルの先頭に数字があることと何か関係がありますか?

編集

わかりやすくするために、コントローラーからのコードを追加しました。

    [HttpPost]
    // [ValidateAntiForgeryToken]
    // id is a string of words eg: "outlook access vpn"
    // I split the words and want to check the Title to see how many words appear
    // Then sort by the most words found
    public JsonResult Lookup(string id)
    {
        List<string> listOfSearch = id.Split(' ').ToList();
        var results = db.KS.Where(x => listOfSearch.Any(item => x.Title.Contains(item)));

        // search each result, and count how many of the search words in id are found
        // then add the count to the start of Title
            foreach (KS result in results)
            {
                result.KSId = 0;
                foreach (string li in listOfSearch)
                {
                    if (result.Title.ToLower().Contains(li.ToLower()))
                    {
                        result.KSId += 1;
                    }
                }
                result.Title = result.KSId.ToString() + " " + result.Title;
            }
       // sort the results based on the Title - which has number of words at the start
       IEnumerable<KS> query = results.OrderByDescending(x => x.Title).ToList();
       return Json(query, JsonRequestBehavior.AllowGet);
    }

以下は、タイトルが 1、2、1、1 の順序で表示されたクエリが入力された後のスクリーンショットです。

VSSS

それが役立つ場合のオブジェクトのモデルは次のとおりです。

 public class KS
{
    public int KSId { get; set; }
    public string KSSol { get; set; }
    public string Title { get; set; }
    public string Fix { get; set; }
}
4

5 に答える 5

0

奇妙な動作をいつでも無視して、安全な方法で行くことができます。

List<KS> query = results.ToList();
query.Sort((a, b) => a.Whatever.CompareTo(b.Whatever));

return Json(query, blah);
于 2013-05-01T07:26:21.603 に答える
0

私はこれを簡単に実行しましたが、うまくいきました:-

var sortedOrder = Query.OrderBy(b => b.Title.Substring(b.Title.IndexOf(" ")));

私が行ったのは、シーケンス内のオブジェクトを順序付けするときに空白のインデックスにあるタイトルを SubString にすることだけです。そのようにして、OrderBy はタイトルの最初の数字ではなく最初の文字を見ています。

于 2013-05-01T07:43:45.293 に答える
-1

あなたが行方不明です.ToList()

IEnumerable<KS> query = results.OrderByDescending(x => x.Title).ToList();

results.OrderByDescending(x => x.Title)はクエリであり、データはありません。 ToList()クエリの実行を強制します。

[編集]

私の答えは、あなたresultsが実際に実現していないこと、そしてそれあなたの問題の原因であることを前提としています。

于 2013-05-01T06:52:58.497 に答える