我有一种方法(与CSOM Sharepoint分类有关),该方法可以根据特定参数从子查询集合中返回特定元素
当前,它仅返回集合中的第一个元素或最后一个元素;但是,我想返回所有元素,包括第一个和最后一个
我不想更改代码的结构,只想修改它们以保持LINQ格式
请让我知道如何正式完成
public List<JToken> GetSubTermsByTermName(string type, string termName)
{
var termSetTerms =
from t in Terms
where (string)t["type"].First == type
select t;
var rootTerms = termSetTerms.Where(t =>
termSetTerms.Any(u =>
((string)u["label"] == (string)t["sub_class_of"].First["label"]
&& (string)t["sub_class_of"].First["label"] == termName) ||
((string)u["label"] == (string)t["sub_class_of"].Last["label"]
&& (string)t["sub_class_of"].Last["label"] == termName)));
return rootTerms.ToList<JToken>();
}
这是我要阅读的JSON代码段
"results":[
{
"id":"id",
"label":"label",
"type":[
"my type"
],
"sub_class_of":[
{
"id":"parentid1",
"label":"parentlabel1"
},
{
"id":"parentid2",
"label":"parentlabel2"
},
{
"id":"parentid3",
"label":"parentlabel3"
}
]
}
答案 0 :(得分:0)
现在我决定更改代码的结构,以后我可能会将其更改为linq join,但现在可以正常使用
public List<JToken> GetSubTermsByTermName(string type, string termName)
{
var termSetTerms =
from t in Terms
where (string)t["type"].First == type
select t;
List<JToken> subClasses = new List<JToken>();
foreach (var rootTerm in termSetTerms)
{
if (rootTerm["sub_class_of"].Count() > 0)
{
foreach(var subClassOf in rootTerm["sub_class_of"])
{
if ((string)subClassOf["label"] == termName)
{
subClasses.Add(rootTerm);
}
}
}
}
return subClasses;
}