Как получить доступ к данным в 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);
}

Это возвращает a {System.Data.Linq.SqlClient.SqlProvider+OneTimeEnumerable1 [ORM_Linq. Articu]}'

Я не вижу, что любой метод как Вы говорит мне. Я вижу Бросок <>, Выражение, ToString...

8
задан Brian Tompsett - 汤莱恩 17 January 2016 в 19:26
поделиться

4 ответа

-

Отредактируемое: Обновлено на основе дополнительной информации с других сообщений ...

Ваш метод 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; 
}


Если у вас есть один результат SingleOdefault , который вернет значение по умолчанию, если результаты не возвращаются:
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..
}
7
ответ дан 5 December 2019 в 21:19
поделиться

Если вы ожидаете только одно значение, просто позвоните методом firstordefault () .

public void setdata (IQueryable mydata)
{
    textbox1.text = mydata.FirstOrDefault().PropertyName;
}
-1
ответ дан 5 December 2019 в 21:19
поделиться

Во-первых, вы должны использовать сильно типизированную версию IQueryable . Скажем, что ваши объекты имеют тип MyObject и что MyObject имеет свойство с именем Name типа string. Затем, сначала измените параметр mydata на тип IQueryable:

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;
}
1
ответ дан 5 December 2019 в 21:19
поделиться

Ну, как следует из названия, объект, реализующий IQueryable... Заинтересованный! Вам нужно будет написать запрос на linq, чтобы получить информацию о внутренних деталях вашего объекта IQueryable. В запросе на linq вы сможете вытащить его данные и назначить биты, где бы вы ни захотели - например, в текстовом поле.

Вот отличное место для начала изучения Linq.

0
ответ дан 5 December 2019 в 21:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: