列表过滤返回0,但不应该

时间:2012-03-21 11:08:08

标签: c# asp.net .net

我已经列出了一个列表,在某些情况下,列表已填充。简单。但是,当我尝试根据下拉选择ddlLeadCounty.SelectedItem.Value过滤列表时,计数返回为0.这绝对不是真的,因为我手动检查了下拉列表中的值和拉入到下拉列表中的值列表是一样的。

你们中任何一个聪明人都能看到它可能出错的地方吗?我已经尝试了以下两种方法来获得相同的结果。

。#code of behind

myList = myList.FindAll(delegate(Partner part)
{
  return part.RegionId.Equals(ddlLeadCounty.SelectedItem.Value);
});

OR

myList = myList.Where(c => c.RegionId.Equals(ddlLeadCounty.SelectedItem.Value)).ToList();

合作伙伴名单:

public class Partner
{
    public int LeadOppCount;
    public string Guid;
    public int RegionId;

    public Partner(int LeadOppCount, string Guid, int RegionId)
    {
        this.LeadOppCount = LeadOppCount;
        this.Guid = Guid;
        this.RegionId = RegionId;
    }
}

下拉列表示例:

<asp:ListItem value="100000004">Berkshire</asp:ListItem>

在我的测试中,至少有一个列表项肯定有一个regionId为100000004。

非常感谢提前。

2 个答案:

答案 0 :(得分:2)

考虑到你是我看到RegionId我认为它是integer,所以写一下这样的一个伪代码

int valueSelected = (int)ddlLeadCounty.SelectedItem.Value;
myList.FindAll(x=>x.RegionId == valueSelected ); 

换句话说,不要在Equals中使用{em>可能盒装值的SelectedValue,而是使用具体类型。

应该为你工作。

答案 1 :(得分:0)

问题是SelectedIndex.Value是一个字符串值而不是int,所以你必须解析它。以下行应该有效:

var myListFiltered = myList.Where(c => c.RegionId.Equals(int.Parse(ddlLeadCounty.SelectedItem.Value))).ToList();