Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
Sql server 实体框架LINQ查询_Sql Server_Entity Framework_Linq - Fatal编程技术网

Sql server 实体框架LINQ查询

Sql server 实体框架LINQ查询,sql-server,entity-framework,linq,Sql Server,Entity Framework,Linq,我想知道如何更改这个实体框架linq查询 我有一个包含以下列的表:project varchar、code varchar、assessment integer 代码数据是分层的-即10011、10012、10013..等是代码1001的子级。另一个示例123001、123002、12300、12301是代码1230的子级 我希望查询基于项目,然后遍历每行代码,检索所有it子项,例如assessment=0 我编写了以下代码,但没有给出正确的结果: var result = db.tableA.

我想知道如何更改这个实体框架linq查询

我有一个包含以下列的表:project varchar、code varchar、assessment integer

代码数据是分层的-即10011、10012、10013..等是代码1001的子级。另一个示例123001、123002、12300、12301是代码1230的子级

我希望查询基于项目,然后遍历每行代码,检索所有it子项,例如assessment=0

我编写了以下代码,但没有给出正确的结果:

var result = db.tableA.AsQueryable(); 
var tempResult = result.Where(p => p.project.Equals(ProjectValue));
result = tempResult.Where(c => c.Code.StartsWith(c.Code) && c.assess== 0);

上面的查询并没有返回代码的子项,其中project等于“ProjectValue”

我现在能想到的最接近的东西是,您在问题中给出的上下文量最终将是:

var result = db.tableA.AsQueryable(); 
var tempResult = result.Where(p => p.project.Equals(ProjectValue)).select(p => p.code);
result = result.Where(c => tempResult.contains(c.Code.substring(0, 4)) && c.assess== 0 && c.project.Equals(ProjectValue));

为了做到这一点,您需要知道哪些记录是父项,如果不是,则您的条件StartsWith将始终为真,因为您的tempResult中有子项和父项

我假设长度最小的代码是父代码。 选择父项后,只需获取以父项代码开头但长度与父项代码不同的所有记录

var result = db.tableA.AsQueryable();
var minLength = result.Select(t => t.Code.Length).Min(); 
var tempResult = result.Where(p => p.project.Equals(ProjectValue) && p.Code.Length == minLength);
result = result.Where(c => tempResult.Any(d => c.Code.StartsWith(d.Code)) && c.assess== 0 && c.project.Equals(ProjectValue) && c.Code.Length != minLength);

什么它实际上存储在project中?孩子们不是共享同一个项目吗?!另外,您要说的是select c=>c.Code.StartsWithc.Code这始终是所有数据,因为您要对其进行自我检查。你需要定义你要找的c代码没有孩子不共享同一个项目。最初,我想查询其project='ABC'的所有项,然后我想从主表中检索所有子项代码,在主表中,当c.project.EqualsProjectValue为true时,assessment equal 0Below更新的答案应该为youtempResult.containsc.code.substring0,4将始终为true