9

我有 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+OneTimeEnumerable1[ORM_Linq.Articu]}`

我没有看到像你告诉我的任何方法。我看到 Cast<>、Expression、ToString...

4

5 回答 5

8

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

您的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..
}
于 2010-01-29T15:26:52.907 回答
2

首先,您应该使用强类型版本的IQueryable. 假设您的对象是 typeMyObject并且MyObject具有称为Nametype的属性string。然后,首先将参数更改mydata为 type 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;
    }
}

或者,如果您想连接所有名称:

public void setdata(IQueryable<MyObject> mydata) {
    string text = String.Join(", ", mydata.Select(x => x.Name).ToArray());
    textbo1.Text = text;
}
于 2010-01-29T15:30:11.327 回答
0

我认为您在来自 FoxPro 和来自 DataSet 时会遇到同样的心理斗争。在这些世界中,非常好的、强大的基于字符串的功能(用于查询、访问表和列名的 sql)不可用,而是被一组编译的强类型功能所取代。

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

于 2010-09-29T11:35:20.190 回答
0

好吧,顾名思义,实现 IQueryable 的对象是……可查询的!您需要编写一个 linq 查询来获取 IQueryable 对象的内部详细信息。在您的 linq 查询中,您将能够提取其数据并将其分配到您想要的任何位置 - 就像您的文本框一样。

这是学习Linq的绝佳起点。

于 2010-01-29T15:28:45.947 回答
-1

如果您只期望一个值,只需调用FirstOrDefault()方法。

public void setdata (IQueryable mydata)
{
    textbox1.text = mydata.FirstOrDefault().PropertyName;
}
于 2010-01-29T15:27:11.347 回答