解決策を見つけるためにグーグルを試しましたが、得られるのはまったく無関係な結果、またはここにあるような 2 次元配列を含む結果だけです。 -14d7-49e9-b721-db4501db62c8/how-does-one-increment-a-value-in-a-two-dimensional-array。
これを宣言したとしましょう:
var db = Database.Open("Content");
var searchTerms = searchText.Split('"').Select((element, index) => index % 2 == 0 ? element.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries) : new string[] { element }).SelectMany(element => element).ToList();
int termCount = searchTerms.Count;
(注: 本当に知っておく必要がsearchTerms
あるのは、ユーザーが検索バーに入力した多数の検索語が保持されていることだけです。LINQ 式が行っているのは、qoutes で囲まれたテキストが単一の検索語として扱われるようにすることだけです。この質問の目的のために、これらすべてを知る必要はありません。 )
searchTerms
次に、(リスト内の項目の数ごとにループする for ループを使用して) SELECT
SQL クエリとして使用する文字列をコンパイルしました。
@0, @1, etc.
これは、クエリがパラメーター化されるように、この文字列の一部がプレースホルダーでコンパイルされていることを示す例です。
searchQueryString = "SELECT NULL AS ObjectID, page AS location, 'pageSettings' AS type, page AS value, 'pageName' AS contentType, ";
for (int i=0; i<termCount; i++)
{
if(i != 0)
{
searchQueryString += "+ ";
}
searchQueryString += "((len(page) - len(replace(UPPER(page), UPPER(@" + i + "), ''))) / len(@" + i + ")) ";
}
searchQueryString += "AS occurences ";
(注: 上記のコードについて本当に知っておく必要があるのは i
、 @
シンボルに の増分値を連結して、プレースホルダー値を動的にコンパイルしていることだけです。 )
上記のすべてが正常に機能しますが、後で、この行に沿って何かを使用する必要があります (実行時まで必要な引数の数だけはわかりません)。
foreach (var row in db.Query(searchQueryString, searchTerms[0]))
{
@row.occurences
}
(明確化のために: リスト内のアイテムの数に等しい数の追加の引数(つまり、引数に加えて)が必要であり 、正しいインデックスを参照する必要があります(効果的に各インデックスを最低から最高まで参照し、もちろん、コンマで区切って順番に。)searchQueryString
searchTerms
また、もちろん、リストの適切なインデックスを参照するために増分値を使用する必要がありますが、そこまで到達できれば、その方法もわかりません。そのために何らかの形で使用できi++
ますか?
C# が強力であることは知っていますが、質問が多すぎるのではないでしょうか?