6

文字列変数 saljes、kopes、bytes、erbjudes を構成するこれらの 4 つのチェックボックスがあります。それらがチェックされると、値「on」が得られます。

これから、LINQ ステートメントに含めたいすべての数値を含む文字列変数 (p) をまとめます。すべてのチェックボックスがチェックされている場合、「1234」という文字列が得られ、チェックボックス 2 と 4 のみがチェックされている場合、「24」になります。

私のデータベースには、int型の「Type」というフィールドがあります。文字列 p にある "Type" 値を持つすべての行を含めるようにデータベースに指示したいと考えています。

このようなもの(もちろん、私のコードは機能しないので、皆さんが必要です):

        var searchResult = from s in db.Ads select s;
        string p = "1";

        if (saljes != "on")
            p = p.Replace("1", "");
        if (kopes == "on")
            p += "2";
        if (bytes == "on")
            p += "3";
        if (erbjudes == "on")
            p += "4";

        searchResult = searchResult.Where(s => p.Contains(s => s.Type.ToString());

私がちょっとする必要があるのは、Contains() を逆にすることですが、どうすればよいでしょうか?

4

3 に答える 3

3

問題が何であるかは明確ではありませんが、これはうまくいくはずです:

searchResult = searchResult.Where(s => p.Contains(s.Type.ToString());

pは文字列で、Contains(string value)は文字列をパラメーターとして想定しているため、ラムダ式は必要ありません。

于 2012-04-25T13:42:00.263 に答える
1

この表現でいいでしょうか?

s => s.Type.ToString().ToCharArray().Except(p.ToCharArray()).Count() == 0

たとえば、if s.Typeis24pis "234"thens.Typeが文字列に含まれます。intをchar-array に変換すると、次のようになります

{'2', '4'}

文字配列に変換された文字列は

{'2', '3', '4'}

の桁intがすべて に含まれていることを意味しstringます。したがって、int数字以外のstring数字は、 でテストする空のセットを生成しCount() == 0ます。

{'2', '4'}.Except({'2', '3', '4'}) ==> { }

を作成する代わりにstringList<char>

var p = new List<char>();               

if (saljes == "on") p.Add('1');               
if (kopes == "on") p.Add('2');               
if (bytes == "on") p.Add('3');               
if (erbjudes == "on") p.Add('4');               

次に、式は次のようになります。

s => s.Type.ToString().ToCharArray().Except(p).Count() == 0

ただし、これは適切な SQL-where 句に変換できないことに注意してください。したがって、テーブル全体をスキャンする必要があります。

于 2012-04-25T13:43:58.917 に答える
1

Contains()ここで説明されているように、すでに「逆IN」です。

int[] productList = new int[] { 1, 2, 3, 4 };

var myProducts = from p in db.Products
                 where productList.Contains(p.ProductID)
                select p;

したがって、単純にリストを埋めます:

var list = new List<int>();

if (saljes == "on")
    list.Add(1);
if (kopes == "on")
    list.Add(2);
if (bytes == "on")
    list.Add(3);
if (erbjudes == "on")
    list.Add(4);

var searchResult = db.Ads.Where(s => list.Contains(s.Type));
于 2012-04-25T13:34:31.813 に答える