包含(),如何使用lambda反转

Mik*_*bro 6 c# model-view-controller lambda linq-to-sql

我有这4个复选框,它们构成字符串变量saljes,kopes,bytes,erbjudes.检查它们时,它们会获得"打开"值.

从这里我把一个字符串变量(p)放在一起,其中包含我想要包含在LINQ语句中的所有数字.假设如果选中所有复选框,我将得到一个"1234"的字符串,如果只选中复选框2和4,则会产生"24".

在我的数据库中,我有一个名为"Type"的字段,其类型为int.我想告诉数据库包含所有可以在字符串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());
Run Code Online (Sandbox Code Playgroud)

我有点需要做的是反转Contains(),但是如何?

Cod*_*ter 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;
Run Code Online (Sandbox Code Playgroud)

所以只需填写一个列表:

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));
Run Code Online (Sandbox Code Playgroud)