Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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中为“in”子句使用Contains-字符串和字节之间不同_C#_Linq_Contains - Fatal编程技术网

C# 在LINQ中为“in”子句使用Contains-字符串和字节之间不同

C# 在LINQ中为“in”子句使用Contains-字符串和字节之间不同,c#,linq,contains,C#,Linq,Contains,我正在尝试创建一个LINQ查询来提取特定的子类型,这些子类型以字节的形式存储在表中。我尝试了几种变体,并使其在强制输入和输出字符串时工作;但我无法得到一个数字版本。我想这是某种我不太理解的c规则,但我不确定该去哪里找。有什么建议吗 // This works okay, but doesn't makes sense to go in/out of string string[] subTypes = { "2", "4" }; // 2 = Clinic, 4 = SubClin

我正在尝试创建一个LINQ查询来提取特定的子类型,这些子类型以字节的形式存储在表中。我尝试了几种变体,并使其在强制输入和输出字符串时工作;但我无法得到一个数字版本。我想这是某种我不太理解的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是否可能不是字节而是int

因为您使用的是var关键字,所以locationType变量的定义类似于int

var locationType = 2;
// Equivalent to
int locationType = 2;
如果存在任何歧义,请使用显式类型声明:

byte locationType = 2;

定义无法使[it]工作属性o.LocationType的类型是什么?我对我的EF有点生疏,where subType.Anyx=>x==o.LocationType工作吗?实体框架对byte[]做了一些有趣的事情:o.LocationType被定义为tinyint,我假设它与byte相同;它们不是,所以我需要说subType.Containsbyteo.LocationTypeBy无法让它工作我是说编译器显示了一个关于Contains的错误。我猜SQL类型的tinyint和c类型的byte不是100%兼容的,所以需要强制转换。字节[]子类型={2,4};//2=临床,4=亚临床`var Clinic=from o in db.Locations``其中subType.Containsbyteo.LocationType``选择o.Name`谢谢您的回答,但我并没有将locationType声明为变量。locationType是SQL DB表中的一个属性,定义为tinyint。我认为tinyint和byte是一样的,所以我没有想到我需要强制tinyint到byte的转换。您的答案是正确的,并且很有帮助,除了c代码中需要显式键入外,对于数据库的构建方式无能为力。可能是您可以在SQL Server中更改列的类型,或者如果您确实存储了一个字节,则可以在SQL中强制转换结果