2017-03-02 117 views
0

看起來像一個簡單的,但沒有提出正確的事情。我需要做的就是獲取具有自己的子空值的子項的數量。這是我一直在努力:實體框架包括大孩子爲零的孩子

var data = await _context.award.Include(a => a.expenses.Select(p => p.invoice == null)).ToListAsync(); 

我也試過其他組合,沒有運氣。我得到的錯誤是

InvalidOperationException:屬性表達式'a => {來自[a] .expenses select([p] .invoice == null)}'中的費用p無效。表達式應該表示一個屬性訪問:'t => t.MyProperty'。

我改變它匹配,它只是觸發一個新的錯誤。

我只是想獲得的award列表與它的上市expenses列表(罰款只是如果影響解決方案的.ID),其中invoice父對象未設置並null

UPDATE 請求模型

public class invoice 
{ 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int ID { get; set; } 

    [ForeignKey("INV_NUM_ForeignKey")] 
    public invoice_number fin_invoice_number { get; set; } 
} 

public class invoice_number 
{ 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int ID { get; set; } 

    public int number { get; set; } 

    public invoice invoice { get; set; } 

    public string display { get { return string.Format("sps-{0}", (new String('0', 6) + number.ToString())).Substring(number.ToString().Count()-7, number.ToString().Count()); } } 
} 

回答

1

你必須使用.Include連同.ThenInclude。 Docs明確解釋了here(包括多個級別)。

var data = await _context.award 
    .Include(a => a.expenses) 
     .ThenInclude(e => e.invoice) 
    .ToListAsync(); 

注意:但注意,這ThenInclude有兩個重載和機會是很大的,是Visual Studio會選擇錯誤或只顯示一個(錯誤的),給你要麼錯誤,同時打字或不如果e不是集合,則爲e提供自動競爭。如果您忽略錯誤並輸入正確的屬性並關閉括號,則錯誤將消失。

+0

的打動了我'ArgumentException的:酒店式「E =>(e.invoice == null)的是無效。表達式應該表示一個屬性訪問:'t => t.MyProperty'。' –

+0

刪除括號 – Tseng

+0

你的模型是什麼? – Tseng

0

看來你知道你在做什麼,但 有時會發生與魔法字母解決問題的噩夢......

一般EF的(哪個版本你使用不知道), 據我所知,像這裏描述的那樣

https://msdn.microsoft.com/en-us/library/jj574232(v=vs.113).aspx

檢查你的模型相關的屬性 主動或懶惰的決定......

如果thesee不解決,然後切換你的電腦:) .. 然後就在EF配置檢查關聯定義

對不起仍不能發表評論。我必須寫回答...

0

嘗試重新編寫代碼這樣

var data = await _context.award.Include(a => a.expenses).Where(p => p.expenses.Any(a => a.invoice == null)).ToListAsync(); 

Subscribe更多有關LINQ