如何访问IQueryable数据?

时间:2010-01-29 15:25:58

标签: linq iqueryable

我有IQueryable对象,我需要将IQueryable中的数据放入Textboxs控件中。这可能吗?

我试着像:

public void setdata (IQueryable mydata)
{

    textbox1.text = mydata.????

}

更新

我这样做:

public IQueryable getData(String tableName, Hashtable myparams)
{
        decimal id = 0;

        if (myparams.ContainsKey("id") == true)
             id = (decimal)myparams["id"];

        Type myType= Type.GetType("ORM_Linq." + tableName + ", ORM_Linq");

        return this.GetTable(tableName , "select * from Articu where id_tipo_p = '" + id + "'");

}


public IQueryable<T> GetTable<T>(System.Linq.Expressions.Expression<Func<T, bool>> predicate) where T : class
{
    return _datacontext.GetTable<T>().Where(predicate);
}

这将返回{System.Data.Linq.SqlClient.SqlProvider+OneTimeEnumerable 1 [ORM_Linq.Articu]}`

我没有看到你告诉我的任何方法。我看到Cast&lt;&gt ;, Expression,ToString ......

5 个答案:

答案 0 :(得分:7)

编辑:根据您其他帖子中的其他信息进行更新...

您的getData方法返回IQueryable而不是强类型结果,这就是您最终投射它的原因。尝试将其更改为:

public IQueryable<ORM_Linq.Articu> getData(...)

您是否尝试从不同的表格中查询“Articu”?

通过上述更改,您的代码可以按如下方式重写:

ORM_Linq.Articu result = mydata.SingleOrDefault();
if (result != null)
{
    TextBoxCode.Text = result.id.ToString();
    TextBoxName.Text = result.descrip; 
}

<小时/> 如果您只有一个结果,请使用SingleOrDefault,如果没有返回结果,将返回默认值:

var result = mydata.SingleOrDefault();
if (result != null)
{
       textbox1.text = result.ProductName; // use the column name
}
else
{
    // do something
}

如果你有多个结果,那么循环它们:

foreach (var item in mydata)
{
   string name = item.ProductName;
   int id = item.ProductId;
   // etc..
}

答案 1 :(得分:1)

首先,您应该使用强类型版本的IQueryable。假设您的对象属于MyObject类型且MyObject具有类型为Name的{​​{1}}属性。然后,首先将参数string更改为mydata类型:

IQueryable<MyObject>

然后我们可以像这样编写一个实体来实际获取一些数据。假设我们只想要查询的第一个结果:

public void setdata (IQueryable<MyObject> mydata)

或者,如果你想连接所有的名字:

public void setdata (IQueryable<MyObject> mydata) {
    MyObject first = mydata.FirstOrDefault();
    if(first != null) {
        textbox1.Text = first.Name;
    }
}

答案 2 :(得分:0)

嗯,顾名思义,实现IQueryable的对象是......可查询的!您需要编写linq查询以获取IQueryable对象的内部详细信息。在您的linq查询中,您将能够提取其数据并在您喜欢的位置分配它 - 就像您的文本框一样。

这是学习Linq的一个很好的起点。

答案 3 :(得分:0)

我认为你从FoxPro和DataSet中找到同样的心理困境。在这些世界中,非常好的,强大的基于字符串的功能(用于查询的sql,对表和列名称的访问)不可用,而是用编译的,强类型的功能集代替。

如果您静态定义搜索的UI并且结果显示在编译时已知的数据源,那么这非常好。如果您正在尝试构建一个系统,该系统附加到仅在运行时已知且由配置数据定义的现有数据源,那就不太好了。

答案 4 :(得分:-1)

如果您只想要一个值,请调用FirstOrDefault()方法。

public void setdata (IQueryable mydata)
{
    textbox1.text = mydata.FirstOrDefault().PropertyName;
}