2012-04-23 158 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