簡體   English   中英

.Take(1)之后的LINQ子查詢

[英]LINQ Subquery after .Take(1)

我有一個LINQ查詢,在這里我選擇一個具有whereorderby子句的父元素,我只需要它的第一個結果,所以我將.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM