使用LINQ,从列表中获取具有特定列值的所有对象?

时间:2013-12-05 16:43:34

标签: c# asp.net linq

如果我有一个包含多个A和属性的List,那么如何使用LINQ获取列表中获得属性值为A.abc =“ABC”的所有A。我希望在下拉列表触发SelectedIndexChanged时发生这种情况。我尝试了以下内容:

var datasource = from A in GetListOfAs() where A.attribute == "ABC" select A;

            GridView1.DataSource = datasource;
            GridView1.DataBind();

在我的GridView中,我有以下BoundFields:

<asp:BoundField DataField="attribute" HeaderText="h1" />
<asp:BoundField DataField="df2" HeaderText="h2" />

所以我希望它显示如下:

  h1             h2
  ------------------
  ABC            123
  ABC            456

编辑:

初始数据源是整个GetListOfAs()。我正在尝试仅列出具有属性值为“ABC”的那些,但是当我在下拉列表中选择ABC时它会一直显示相同的列表(我可以看到SelectedIndexChanged出现,因为页面重新加载)。

Page_Load方法:

protected void Page_Load(object sender, EventArgs e)
    {
        GridView1.DataSource = GetListOfAs();
        GridView1.DataBind();

        ddl.DataSource = GetListOfChoices();
        ddl.DataTextField = "name";
        ddl.DataValueField = "attribute";
        ddl.DataBind();

        if (ddl.Items.Count > 0)
        {
            ddl.Items.Insert(0, "Select one");
            ddl.Items[0].Value = "";
            ddl.SelectedIndex = 0;
        }
    }

显然,问题在于没有获得正确的SelectedValue。

我有:String ddlValue = ddl.SelectedValue;这不应该有用吗?我一直空白(“”)这是初始值。

2 个答案:

答案 0 :(得分:1)

您要做的是在IsPostBack事件内的初始绑定代码中添加Page_Load检查。每个回发都会触发Page_Load,所以如果不进行此检查,每次都会有效地运行初始数据绑定(包括所有元素)。

将您的网页加载更改为此

protected void Page_Load(object sender, EventArgs e)
{

    // Only bind your gridview with all items, if this is the first page load
    if(!Page.IsPostBack) {
        GridView1.DataSource = GetListOfAs();
        GridView1.DataBind();

        ddl.DataSource = GetListOfChoices();
        ddl.DataTextField = "name";
        ddl.DataValueField = "attribute";
        ddl.DataBind();

        if (ddl.Items.Count > 0)
        {
            ddl.Items.Insert(0, "Select one");
            ddl.Items[0].Value = "";
            ddl.SelectedIndex = 0;
        }
    }    

}

我认为IsPostBack绑定错误是由每个ASP.net开发人员首次启动时产生的,所以不要感觉不好!你的公司很好:)。

答案 1 :(得分:0)

var datasource = GetListOfAs().Where(x=>x.attribute=="ABC").ToList();

这是获得你已经获得的方式的另一种方式。