検索用語、クリックなどを含むエンティティのリストがあります。
ユーザーは、エンティティ間のクリック数を比較できる必要があります。つまり、検索の最初に「無料サンプル」という単語を含むすべてのエンティティと比較します。フレーズの最後に「arrest me」というフレーズを含むすべてのエンティティ。
複数の foreach と switch を使用してこれを行うことができます (ユーザーがクエリと文字列の一部を選択するため) が、Linq を使用することで「start with」関数と「end with」関数を使用できることを理解しています。案内していただけますか?
3 に答える
Where()
条件を満たすエンティティのセットを返すLINQ :
var filtered = entities.Where(e =>
e.SearchPattern.StartsWith("Start")
&&
e.SearchPattern.EndsWith("End"));
Single()/SingleorDefault()
複数のエンティティが見つかった場合、条件を満たす単一のエンティティを返すLINQ-例外がスローされます。
var filtered = entities.Single(e =>
e.SearchPattern.StartsWith("Start")
&&
e.SearchPattern.EndsWith("End"));
LINQ First()
/Last()
指定された条件の最初/最後のエンティティを返す...
var filtered = entities.First(e =>
e.SearchPattern.StartsWith("Start")
&&
e.SearchPattern.EndsWith("End"));
完全なリストについては、列挙可能なクラスメソッドを参照してください。
「無料サンプル」で始まり、「逮捕」で終わるもののリストが必要なようです。それがあなたが望むものであると仮定して、あなたはこのようなことをするでしょう。
// Assumes myStuff is where all of your data is right now
var startsWith = myStuff.Where(x => x.MyString.StartsWith("free sample"));
var endsWith = myStuff.Where(x => x.MyString.EndsWith("arrest me"));
// Now you can do whatever comparisons between the two lists you need
もちろん、「無料サンプル」で始まり「逮捕」で終わるすべてのものが必要な場合は、これを行うことができます
var hasBoth = myStuff.Where(x => x.MyString.StartsWith("free sample") && x.MyString.EndsWith("arrest me"))
The functions you mention are just string functions. s.StartsWith("abc")
and s.EndsWith("xyz")
. In a LINQ query you can use them in a where clause.
var startIndexes = phrases
.Where(p => p.StartsWith("free sample")
.Select((p, i) => i);
var endIndexes = phrases
.Where(p => p.EndsWith("arrest me")
.Select((p, i) => i);
These two queries return the indexes of phrases that start, respectively end with a certain string. I use an overload of select that accepts the index as second parameter.