2012-04-23 209 views
0

我想將filterType傳遞給GetPeronMemberDTO,如何實現這一點。將值傳遞給函數

filters = filterItems. 
    AsQueryable(). 
    Select(z => new Person() 
    { 
     Name = z.Name, 
     ID = Convert.ToString(z.ID), 
     FilterType = GetFilterType(Convert.ToString(z.TemplateID)), 
     // TODO : How to pass the filtertype in the below function 
     FilterMembers = GetPeronMemberDTO(
      Convert.ToString(z.ID), 
      searchParamDTO, 
      Convert.ToString(z.TemplateID)), 
    }) 

感謝 DS

+0

什麼是'filterItems'和'searchParamDTO',什麼不起作用,你會得到一個異常嗎? – 2012-04-23 12:20:10

+0

GetFilterType和GetPeronMemberDTO返回什麼? – Arion 2012-04-23 12:20:53

+0

請詳細描述您的工作環境。 – HW90 2012-04-23 12:21:15

回答

4

使用查詢語法,你可以使用一個let表達:

filters = from z in filterItems.AsQueryable() 
      let filterType = GetFilterType(Convert.ToString(z.TemplateID)) 
      select new Person 
      { 
      Name = z.Name, 
      ID = Convert.ToString(z.ID), 
      FilterType = filterType, 
      FilterMembers = GetPeronMemberDTO(Convert.ToString(z.ID), 
       searchParamDTO, Convert.ToString(z.TemplateID), filterType) 
      } 
1
filters = filterItems 
      .AsQueryable() 
      .Select(z => new { 
       Item = z, 
       FilterType = GetFilterType(Convert.ToString(z.TemplateID)) 
      }) 
      .Select(z => new Person() 
      { 
       Name = z.Item.Name, 
       ID = Convert.ToString(z.Item.ID), 
       FilterType = z.FilterType, 
       FilterMembers = GetPeronMemberDTO(Convert.ToString(z.Item.ID), searchParamDTO, z.FilterType), 
      }) 

或安德斯Abels答案中使用基於查詢的語法,等等。

+1

這是我的查詢語法等價的方法。他們將被編譯完全一樣。我認爲'let'更容易閱讀,所以我更喜歡查詢語法。 – 2012-04-23 12:25:13

+0

當需要'let'時,我更喜歡基於查詢的語法:)但是這個例子是基於方法的,所以我就這樣離開它:) – MarcinJuraszek 2012-04-23 12:33:20

+0

+1用於使用原始表單創建查詢。我從來沒有真正做到這一點。 – 2012-04-23 13:12:11