私は、あなたがContains()でdbで検索するのに使ったプロパティのリスト内で一時単語の出現を見つけたいと仮定します。
これは段階的なプロセスであり、質問IDと発生数を含む辞書を提供します。この辞書を使って質問リストを注文することができます。
もちろんこれは最適化することができます。
注文する質問が必要な場合は、辞書を使用して注文することができます。出現回数のみを表示する必要がある場合は、次の方法でデータを提供する辞書が作成されます:質問#QuestionId、検索された文字列の発生数。
その単語がPHPであると仮定すると、:、などとなります。レコードは辞書では注文されません。
私はその辞書の注文ステップを追加しました。
あなたのアプローチでRegexを使用しようとすると、あなたはselectステートメントでRegexを使うことはできませんが、メモリ内のすべてのレコードを(.ToList()
の後に)持っていればRegexを使うことができます。参考として、次の質問を使用してください:Using "Match" in a Linq statement
List<QuestionDto> dtoQList = _db.Questions.Where(x => (x.Title.Contains(temp) || x.Message.Contains(temp) || (x.User.FirstName + " " + x.User.LastName).Contains(temp) || x.User.LastName.Contains(temp)) && (categoryId == null || x.Category.CategoryId == categoryId))
.Select(question => new QuestionDto
{
QuestionId = question.QuestionId,
Votes = question.Votes,
Title = question.Title,
Message = question.Message,
CategoryName = question.Category.Name,
EditDate = question.EditDate,
DateOfCreation = question.DateOfCreation,
User = new UserDto { UserId = question.User.Id, FirstName = question.User.FirstName, LastName = question.User.LastName, ImageFile = question.User.ImageFile },
Tags = question.Tags.Select(x => x.Tag).ToList()
}).ToList();
var questionDictionaryMatchings = new Dictionary<int, int>();
foreach(var question in dtoQList)
{
var titleSplited = question.Title.Split(new char[] { '.', '?', '!', ' ', ';', ':', ',' }, StringSplitOptions.RemoveEmptyEntries);
var messageSplited = question.Message.Split(new char[] { '.', '?', '!', ' ', ';', ':', ',' }, StringSplitOptions.RemoveEmptyEntries);
var firstNameSplited = question.User.FirstName.Split(new char[] { '.', '?', '!', ' ', ';', ':', ',' }, StringSplitOptions.RemoveEmptyEntries);
var lastNameSplited = question.User.LastName.Split(new char[] { '.', '?', '!', ' ', ';', ':', ',' }, StringSplitOptions.RemoveEmptyEntries);
var titleSplitedQuery = from word in titleSplited
where word.ToLowerInvariant() == temp.ToLowerInvariant()
select word;
int wordCountTitle = titleSplitedQuery.Count();
var messageSplitedQuery = from word in messageSplited
where word.ToLowerInvariant() == temp.ToLowerInvariant()
select word;
int wordCountMessage = messageSplitedQuery.Count();
var firstNameSplitedQuery = from word in firstNameSplited
where word.ToLowerInvariant() == temp.ToLowerInvariant()
select word;
int wordCountFirstName = firstNameSplitedQuery.Count();
var lastNameSplitedQuery = from word in lastNameSplited
where word.ToLowerInvariant() == temp.ToLowerInvariant()
select word;
int wordCountLastName = lastNameSplitedQuery.Count();
questionDictionaryMatchings.Add(question.QuestionId, wordCountTitle + wordCountMessage + wordCountFirstName + wordCountLastName);
}
//sorted dictionary
var questionDictionaryMatchingsSorted = from entry in questionDictionaryMatchings orderby entry.Value descending select entry;
あなたについてのプログラミングQを尋ねるQ&Aサイト、プログラミングQ&Aサイトに...大胆な動き:-) –