[英]LINQ Subquery after .Take(1)
我有一個LINQ查詢,在這里我選擇一個具有where
和orderby
子句的父元素,我只需要它的第一個結果,所以我將.Take(1)
應用於它。 然后,我需要從父節點中選擇兩個單獨的子節點,每個子節點都具有“ where”子句。
我已經使用兩個不同的LINQ查詢成功完成了此操作,但我覺得它只需要在其中包含一個子查詢的一個查詢,使我掛起的部分是父級上的.Take(1)
,之后該子查詢無法繼續通話無誤。
這就是我現在所擁有的,是否可以將它們組合成一個查詢?
var parent=
(from parentXML in myDal.GetMyXML().Elements("parentElements")
where DateTime.Parse((string)parentXML.Attribute("startDate")) <= currentDate
orderby DateTime.Parse((string)parentXML.Attribute("startDate")) descending
select parentXML).Take(1);
和:
var children =
(from firstChild in parent.Elements("childElements")
where (string)firstChild.Attribute("type") == "first"
from secondChild in parent.Elements("childElements")
where (string)secondChild.Attribute("type") == "second"
select new { first = firstChild , second = secondChild }).ToList();
只是一個快速嘗試:
var children =
(from parentXML in myDal.GetMyXML().Elements("parentElements")
where DateTime.Parse((string)parentXML.Attribute("startDate")) <= currentDate
orderby DateTime.Parse((string)parentXML.Attribute("startDate")) descending
select parentXML).Select(p=>new {
first=p.Elements("childElements").Where(f=>f.Attribute("type")=="first"),
second=p.Elements("childElements").Where(f=>f.Attribute("type")=="second")})
.Take(1);
改寫:
var children =
myDal.GetMyXML()
.Elements("parentElements")
.Where(p=>DateTime.Parse((string)p.Attribute("startDate"))<=currentDate)
.OrderByDescending(p=>DateTime.Parse((string)p.Attribute("startDate")))
.Select(p=>new {
first=p.Elements("childElements").Where(f=>f.Attribute("type")=="first"),
second=p.Elements("childElements").Where(f=>f.Attribute("type")=="second")})
.Take(1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.