在 LINQ 中使用 Contains for "IN" 子句 - 字符串和字节不同
Using Contains in LINQ for "IN" clause - different between strings and bytes
我正在尝试创建一个 LINQ 查询来提取特定的子类型,这些子类型在 table 中存储为字节。我已经尝试了几种变体,并且可以强制输入和输出字符串;但我无法使用数字版本。我认为这是某种我没有正确理解的 c# 规则,但我不确定去哪里找。有什么建议吗?
// This works okay, but doesn't makes sense to go in/out of string
string[] subTypes = { "2", "4" }; // 2 = Clinic, 4 = SubClinic
var clinics = from o in db.Locations
where subTypes.Contains(o.LocationType.ToString())
select o.Name;
// this version shows an error on the "where" clause
// byte[] does not contain a definition for 'Contains'...
byte[] subType = { 2, 4 }; // 2 = Clinic, 4 = SubClinic
var clinic = from o in db.Locations
where subType.Contains(o.LocationType)
select o.Name;
所以当我尝试时:
byte[] subType = { 2, 4 };
var locationType = 2;
Console.WriteLine(subType.Contains(locationType));
Console.ReadLine();
我遇到了和你一样的错误。将代码更改为:
byte[] subType = { 2, 4 };
var locationType = (byte)2;
Console.WriteLine(subType.Contains(locationType));
Console.ReadLine();
它运行良好。 LocationType 有没有可能不是一个字节而是一个整数?
因为您使用的是 var
关键字,所以您的 locationType 变量定义为 int。
var locationType = 2;
// Equivalent to
int locationType = 2;
当有歧义时,使用显式类型声明:
byte locationType = 2;
我正在尝试创建一个 LINQ 查询来提取特定的子类型,这些子类型在 table 中存储为字节。我已经尝试了几种变体,并且可以强制输入和输出字符串;但我无法使用数字版本。我认为这是某种我没有正确理解的 c# 规则,但我不确定去哪里找。有什么建议吗?
// This works okay, but doesn't makes sense to go in/out of string
string[] subTypes = { "2", "4" }; // 2 = Clinic, 4 = SubClinic
var clinics = from o in db.Locations
where subTypes.Contains(o.LocationType.ToString())
select o.Name;
// this version shows an error on the "where" clause
// byte[] does not contain a definition for 'Contains'...
byte[] subType = { 2, 4 }; // 2 = Clinic, 4 = SubClinic
var clinic = from o in db.Locations
where subType.Contains(o.LocationType)
select o.Name;
所以当我尝试时:
byte[] subType = { 2, 4 };
var locationType = 2;
Console.WriteLine(subType.Contains(locationType));
Console.ReadLine();
我遇到了和你一样的错误。将代码更改为:
byte[] subType = { 2, 4 };
var locationType = (byte)2;
Console.WriteLine(subType.Contains(locationType));
Console.ReadLine();
它运行良好。 LocationType 有没有可能不是一个字节而是一个整数?
因为您使用的是 var
关键字,所以您的 locationType 变量定义为 int。
var locationType = 2;
// Equivalent to
int locationType = 2;
当有歧义时,使用显式类型声明:
byte locationType = 2;