這裏是我的類:LINQ的內部的LINQ造成序列返回任何結果
public class XDetail
{
public string Name { get; set; }
public int ID { get; set; }
}
public class X
{
public int XID { get; set; }
public int ID { get; set; }
}
的ID在它們之間共享,以X和XDetail鏈接(一對多關係)。我在使用下面的LINQ查詢文件中讀取並塑造一個匿名類型:
var results = from line in File.ReadAllLines(file)
select new
{
XID = int.Parse(line.Substring(0, 8).TrimStart('0')),
Name = line.Substring(8, 255).Trim()
};
這個數據是用來檢查對現有X/XDetail做出適當的修改或添加新記錄。 XList是一個列表,XDetailList是一個列表。
從那裏我試圖看中LINQ查詢來匹配合適的項目:
var changedData = from x in XList
join xDetail in XDetailList on x.ID equals xDetail.ID
where
(!results.Any(p => p.XID.Equals(x.XID))
|| !results.Any(p => p.Name.Equals(xDetail.Name)))
select new
{
XValue = x,
XDetailValue = xDetail,
Result = (from result in results
where result.Name.Equals(xDetail.Name)
select result).Single() // This line is my bane
};
所以我可以得到我在尋找塑造成新的匿名類型,但是當我試圖在增加的結果該結果= ...內部linq查詢我的整個集轉向:序列不包含任何元素。如果我刪除它,我會得到我想要的結果集。 X/XDetail實際上是類型化的DataRows,我需要在使用匹配結果進一步處理時使用它,但沒有那個結果,我需要做一個後來的linq查詢來找到匹配。我希望能以一種冷靜的方式來做到這一點。
我試過改變結果沒有where子句,我可以得到一個結果,但我希望匹配的結果。有沒有更好的方法來寫這個或者讓結果集再次運行的方法?
這裏的結果是什麼?它的類型是什麼? –
結果是來自第一個查詢的匿名類型,我正在解析該文件的XID和名稱。 – ShelbyZ
我不明白你在說'從XDetail中的xDetail'和'XDetail'是不是一個類填充任何數據?你怎麼做?(我只是問。) – Bastardo