C# 带有复选框的linq到sql查询,其中包含条件组合
如果选中复选框chkAus: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
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();