我有以下课程的列表:
public class SiloRelationship
{
public int RelationshipType { get; set; }
public string MasterKey { get; set; }
public string SlaveKey { get; set; }
public int QueryId { get; set; }
}
我有以下课程的第二个列表:
public class SiloNode
{
public string Key { get; private set; }
public string Url { get; private set; }
public List<NodeQuery> Queries { get; private set; }
}
其中有一个子类:
public class NodeQuery
{
public string Query { get; private set; }
public int Seq { get; private set; }
}
列表:
这是我的查询-有一个简单的联接,此后我需要返回Url和Query属性-过滤器应从列表中生成单个QueryNode。
我们拥有的是:
SiloRelationship => 1 to 1 SiloNode => 1 to many QueryNode
Kvp足以满足本练习的目的,但是我看不到带有到目前为止的代码的Query属性。
var query =
from r in LandingSilo.Relationships
join n in LandingSilo.Nodes on r.SlaveKey equals n.Key
where r.RelationshipType == 1 &&
n.Queries.Select(y => y.Seq).Contains(r.QueryId)
任何帮助表示赞赏。
答案 0 :(得分:1)
您只需要过滤Queries
。如下更改最后一条语句
select n.Queries.FirstOrDefault(q => q.Seq == q.QueryId);
答案 1 :(得分:1)
尝试一下:
IEnumerable<string> queries = LandingSilo.Relationships
.Where(r => r.RelationshipType == 1)
.Join(
LandingSilo.Nodes,
r => r.SlaveKey,
n => n.Key,
(r, n) => n.Queries.SingleOrDefault(q => q.Seq == r.QueryId))
.Where(q => q != null)
.Select(q => q.Query);
逐行:过滤类型与Relationship
不同的所有1
,在SlaveKey
/ Key
上加入并选择节点中唯一具有{ {1}}等于Seq
的{{1}}。筛选出Relationship
个结果,然后选择QueryId
属性。如果一个节点内有多个查询,这将引发null
。
这也可以使用LINQ关键字语法完成,如下所示:
Query