public Dictionary <string, string> GetListByStr(string str) { Dictionary <string, string> dic = new(); List <Idiom> items; bool queryPrevDailyIdioms = false;//查询往日成语 Dictionary <string, List <long> > kv = new(); //if (str == "我全都要") //{ // items = _idioms.Find(new BsonDocument()).Sort(Builders<Idiom>.Sort.Ascending("Name")).ToList(); //} if (str == "试试手气") { items = _idioms.Aggregate().AppendStage <Idiom>("{$sample:{size:5}}").ToList(); } else if (str == "有待订正") { items = _idioms.Find(x => x.ToBeCorrected == true).ToList(); } else if (str.StartsWith("标签:")) { items = _idioms.Find(x => x.Tags.Contains(str.Replace("标签:", ""))).ToList(); } else if (str == "往日成语") { //除去deft List <LaunchInfo> info = _launchInfo.Find(Builders <LaunchInfo> .Filter.Ne("DateUT", DateTimeOffset.MinValue.ToUnixTimeSeconds())).Sort(Builders <LaunchInfo> .Sort.Ascending("DateUT")).ToList(); items = new List <Idiom>(); queryPrevDailyIdioms = true; if (info.Count > 1) { foreach (LaunchInfo itemInfo in info) { if (itemInfo.DailyIdiom != null) { if (!kv.ContainsKey(itemInfo.DailyIdiom.Id + "_" + itemInfo.DailyIdiom.Name)) { kv.Add(itemInfo.DailyIdiom.Id + "_" + itemInfo.DailyIdiom.Name, new List <long> { itemInfo.DateUT }); } else { kv[itemInfo.DailyIdiom.Id + "_" + itemInfo.DailyIdiom.Name].Add(itemInfo.DateUT); } } } } } else { items = _idioms.Find(Builders <Idiom> .Filter.Regex("Name", new BsonRegularExpression(str))).Sort(Builders <Idiom> .Sort.Ascending("Name")).ToList(); } if (queryPrevDailyIdioms) { foreach (var it in kv) { StringBuilder sb = new(); foreach (long i in it.Value) { DateTimeOffset time = DateTimeOffset.FromUnixTimeSeconds(i); sb.Append(string.Format("{0:D}", time.ToLocalTime()) + "、"); } sb.Remove(sb.Length - 1, 1); string[] strArr = it.Key.Split("_"); dic.Add(strArr[0], sb + ":" + strArr[1]); } } else { if (items.Count == 0 && str != "试试手气" && str != "有待订正" && !str.StartsWith("标签:") && str != "往日成语") { AutoCollect(str); ProjectionDefinition <Idiom> definition = Builders <Idiom> .Projection.Include(doc => doc.Name); Dictionary <string, int> res = LevenshteinDistance.Extract(str, _idioms.Find(new BsonDocument()).ToList().Select(x => x.Name).ToList(), 5); foreach (var item in res) { Idiom tmp = _idioms.Find(x => x.Name == item.Key).FirstOrDefault(); dic.Add(tmp.Id, tmp.Name); } } foreach (Idiom item in items) { dic.Add(item.Id, item.Name); } } if (dic.Count == 0) { //rtn = new StandardReturn(20001); throw new EasyException(20001); } else { return(dic); } }