2011-05-21 85 views
1

我確定這是我的缺乏理解。我有一個屬於多個產品的組件。我的控制器動作接收到這樣的分量:選擇()丟棄物品

[HttpPost] public ActionResult Create(Component model) 

其自帶履行了組成部分IDS從形式:

<input type="hidden" name="Products[0].Part.Id" value="3" /> 
<input type="hidden" name="Products[1].Part.Id" value="5" /> 
<input type="hidden" name="Products[2].Part.Id" value="2" /> 

我需要查找數據庫中的這些價值和充實產品出來:

model.Products = model.Products.Select(x => db.Products.Find(x.Id)).ToList(); 

但是,當上面的運行時,我最終只剩下一個單獨的項目,就好像.Select()只返回一個值。我的產品中仍有3個元素,但第二個元素爲空。

我相信這只是我沒有得到它。這應該怎麼做?

+0

'x => db.Products.Find(x.Id)''的意圖是什麼? – 2011-05-21 22:35:20

+1

也許db.Products.Find()方法只是返回null。你有沒有在普通的foreach循環中試過這個,看看會發生什麼? – 2011-05-21 22:35:32

+0

謝謝你們的回覆。我只是很愚蠢。問題是'x => db.Products.Find()'需要是'x => db.Parts.Find()',因爲'x.Id'是一個部件ID,而不是產品ID。咄! – ekkis 2011-05-21 22:57:18

回答

0

謝謝大家的回答。我只是很愚蠢。問題是x => db.Products.Find(x.id)是錯誤的查詢,因爲x.id實際上是一個部件ID,而不是產品ID。咄!

1

將Linq語句轉換爲foreach語句,並使用List.Add()手動將這些項目添加到列表中。然後你可以坐在你的調試器上,看看到底發生了什麼。

1

對於那些你需要做的是倒退,首先得到的ID到一個數組中查詢,然後查詢爲:

int[] ids = //load the ids... 

var products = (from p in Products 
       where ids.Contains(p.Id) 
       select p).ToList(); 
+0

感謝您的回覆。自從我想出來之前,我應該先關閉這個線程(我現在已經做完了)。無論如何,我放棄了提供查詢的一點 – ekkis 2011-09-06 23:08:48