Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有复选框的linq到sql查询,其中包含条件组合_C#_Linq - Fatal编程技术网

C# 带有复选框的linq到sql查询,其中包含条件组合

C# 带有复选框的linq到sql查询,其中包含条件组合,c#,linq,C#,Linq,如果选中复选框chkAus: if (chkAus.Checked) { vAdvanceSearchResults = (from t in vAdvanceSearchResults join imp in _bDataContext.Imprints on t.ImprintID equals imp.ID

如果选中复选框chkAus:

if (chkAus.Checked)
                {
                    vAdvanceSearchResults  = (from t in vAdvanceSearchResults
                                    join imp in _bDataContext.Imprints on t.ImprintID equals imp.ID
                                    join cc in _bDataContext.CountryCodes on imp.CountryID equals cc.ID
                                    where cc.Code.Contains("AU")
                                    select t).Distinct();**
                }
如果检查了chkAus和chkNz

if (chkNz.Checked && chkAus.Checked)
            {
                vAdvanceSearchResults = (from t in vAdvanceSearchResults
                                join imp in _bDataContext.Imprints on t.ImprintID equals imp.ID
                                join cc in _bDataContext.CountryCodes on imp.CountryID equals cc.ID
                                where cc.Code.Contains("AU") || cc.Code.Contains("NZ")
                                select t).Distinct();
            }
选中复选框时,linq查询的条件会发生变化

where cc.Code.Contains("AU") || cc.Code.Contains("NZ")
我有将近10个复选框,我被困在如何写那么多条件上。 请帮忙

例如,如果存在chkUS: 然后,linq查询将更改与chkAus、chkNz、chkUS复选框的组合

where cc.Code.Contains("AU") || cc.Code.Contains("NZ") || cc.Code.Contains("US")

将它们全部放在一个列表中,然后执行if list.contains(cc.Code)

var a=newlist(){“AU”、“NZ”、“US”};
var linq=(来自vAdvanceSearchResults中的t
在t上的_bDataContext.printms中加入imp。printmId等于imp.ID
在imp.CountryID等于cc.ID的bDataContext.CountryCodes中加入cc
其中a.Contains(抄送代码)
选择t.Distinct();

首先创建所选复选框的列表。像这样

var selectedCountries = new List<string>();
if (chkAus.Checked) selectedCountries.Add("AU");
if (chkNz.Checked) selectedCountries.Add("NZ");
if (chkUs.Checked) selectedCountries.Add("US");
//... And so on

这将解决您的问题。

如果chkAU已选中且chkNZ未选中,则cc.Code==“AU”,并且两者均已选中cc.Code==“AU”| cc.Code==“NZ”,op的两个查询相同。列表包含允许国家/地区代码为其中任何一个。如果查询需要基于一个或另一个而有所不同,那么它将是不同的。实际上,这只是一个布尔测试,代码等于任何列表项。@KnowHowSolutions非常感谢您!实际上没有,这里是c#fiddle,list.contains只会返回精确匹配的结果。
var selectedCountries = new List<string>();
if (chkAus.Checked) selectedCountries.Add("AU");
if (chkNz.Checked) selectedCountries.Add("NZ");
if (chkUs.Checked) selectedCountries.Add("US");
//... And so on
vAdvanceSearchResults = (from t in vAdvanceSearchResults 
    join imp in _bDataContext.Imprints on t.ImprintID equals imp.ID 
    join cc in _bDataContext.CountryCodes on imp.CountryID equals cc.ID
    where  selectedCountries.Contains(cc.Code)
    select t).Distinct();