数据库:数据库中有三个表,其中ID为int,代码为string
datatype
。特殊的(countryId也是字符串)。
我正在尝试获得属于两个不同国家的两个特定中心,我知道中心代码。
用户操作:用户从国家/地区 DropDownList
中选择一个选项(特殊),这是一个额外的身份添加到ListItem
其中给出了随机值(即CORP)。
_DropDownListCountry.Items.Insert(1, new ListItem("Special", "CORP"));
预期当用户从_DropDownListCountry为特定年选择上述选项时,应在另一个DropDownList
(_DropDownListCenter)中填充两个项目。该项目应该是(例如1111和2222)在列表上。 年度与中心和公司有关系。
问题:结果显示为(1111,2222,2222),因为数据库中有两个中心,但年不同。当我在||
查询中使用LINQ
时会发生这种情况。但我不明白(代码明智)为什么会发生这种情况。任何帮助将非常感激。
代码
public static IEnumerable<Center> RetriveCenterssByYear(short year)
{
List<Center> centers;
using (var context = new crEntities())
{
centers = (from pc in context.Centers
join company in context.Companies on pc.CompanyID equals company.CompanyID
join co in context.Countries on company.CountryID equals co.CountryID
where pc.Year == year
&& pc.CompanyID == company.CompanyID
&& company.CountryID.Equals(co.CountryID)
&& pc.centerCode.Contains("1111")
|| pc.centerCode.Contains("2222")
select pc).ToList();
}
return centers;
}
答案 0 :(得分:1)
在
周围添加一些括号pc.centerCode.Contains("1111")
|| pc.centerCode.Contains("2222")
所以你的情况应该是
pc.Year == year
&& pc.CompanyID == company.CompanyID
&& company.CountryID.Equals(co.CountryID)
&& (pc.centerCode.Contains("1111")
|| pc.centerCode.Contains("2222"))
由于逻辑运算符具有相同的优先级,因此您的查询当前被解释为
(pc.Year == year
&& pc.CompanyID == company.CompanyID
&& company.CountryID.Equals(co.CountryID)
&& pc.centerCode.Contains("1111"))
|| pc.centerCode.Contains("2222")