Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Linq查询中使用DropDownList selecteditem_C#_Asp.net_Linq_Drop Down Menu - Fatal编程技术网

C# 在Linq查询中使用DropDownList selecteditem

C# 在Linq查询中使用DropDownList selecteditem,c#,asp.net,linq,drop-down-menu,C#,Asp.net,Linq,Drop Down Menu,我有一个dropdownlist,它是gridview中的列列表。我需要能够根据第一个dropdownlist中的列选择填充另一个dropdownlist。我正在填充第一个dropdownlist,如下所示: public void ddlColumnPopulate() { var gvColumns = GridView1.Columns; var viewName = ((IDataSource)EntityDataSource1).GetViewN

我有一个dropdownlist,它是gridview中的列列表。我需要能够根据第一个dropdownlist中的列选择填充另一个dropdownlist。我正在填充第一个dropdownlist,如下所示:

public void ddlColumnPopulate()
    {
        var gvColumns = GridView1.Columns;
        var viewName = ((IDataSource)EntityDataSource1).GetViewNames().OfType<string>().First();

        var view = (EntityDataSourceView)((IDataSource)EntityDataSource1).GetView(viewName);
        var schema = view.GetViewSchema();
        var dsColumns = schema.Columns;
        var dvColumnsDict = gvColumns.OfType<BoundField>().ToDictionary(a => a.DataField);


        foreach (DataColumn c in dsColumns)
        {
            //var li = new ListItem(string.Format("{0}: {1}", c.ColumnName, c.DataType), c.DataType.ToString());  
            var li = new ListItem(c.ColumnName,  c.DataType.ToString());
            ddlColumn.Items.Add(li);                  

        }            
    }
我收到错误消息:数据绑定:“System.String”不包含名为“intBatchID”的属性

改变你的想法
var a=(来自dbContext.tbl\u批处理中的b
选择col)

var a=(来自dbContext.tbl\u批处理中的b

选择col.tolist()

您需要解决以下几个问题:

您必须使用
SelectedItem.ToString
而不是
SelectedItem.Text

string col = ddlColumn.SelectedItem.Text;
您还需要修复
linq
查询。您将需要使用System.Linq.Dynamic 将列名传递给linq查询。您还需要反射来获取列数据。以下内容应可行,但如有任何修改,我将不胜感激:

编辑:
您需要使用
System.Linq.Dynamic
,而不是
动态表达式API

string col = ddlColumn.SelectedItem.Text;   
string selColName = "new(" + col + ")";

var q = dbContext.tbl_Batch.Select(selColName);

List<string> myList = new List<string>();

foreach (var colItem in q)
{
    if (colItem != null)
    {

        Type type = colItem.GetType();
        PropertyInfo pInfo = type.GetProperty(col);
        var myValue = pInfo.GetValue(colItem, null);
        myList.Add(myValue.ToString());
    }
}
myList = myList.Select(x => x).Distinct().ToList();
ddlData.DataSource = myList;
ddlData.DataBind();

你可以下载我的测试项目。

a和col的内容是什么?我不知道你的a的内容是什么。但看起来你是一个字符串,而不是一个列表。如果您有intBatchID,则不应出现问题我在linq上遇到错误-无法将lambda表达式转换为类型“string”,因为它不是委托类型。当它到达foreach时,我收到错误消息:“new”无法解析为有效的类型或函数。在简单标识符第1行第8列附近。item和colitem应该是同一个变量吗?它应该是colitem。。。在测试后,忘记到处更改变量名。SelectedValue应为SelectedItem。我已经修复了代码。我仍然收到错误消息:“new”无法解析为有效的类型或函数。靠近简单标识符,第1行,第8列。当我击中foreach时。我不知道这个错误是什么意思?
string col = ddlColumn.SelectedItem.Text;   
string selColName = "new(" + col + ")";

var q = dbContext.tbl_Batch.Select(selColName);

List<string> myList = new List<string>();

foreach (var colItem in q)
{
    if (colItem != null)
    {

        Type type = colItem.GetType();
        PropertyInfo pInfo = type.GetProperty(col);
        var myValue = pInfo.GetValue(colItem, null);
        myList.Add(myValue.ToString());
    }
}
myList = myList.Select(x => x).Distinct().ToList();
ddlData.DataSource = myList;
ddlData.DataBind();
using System.Linq.Dynamic;
using System.Reflection;