2015-07-22 4 views
0

Я пытаюсь заполнить datagrid списком элементов, полученных из оператора LinqToSQL, и что-то вызывает у меня некоторую путаницу.LinqToSQL требует экспликации?

Когда я явно устанавливаю условие where равным строгому кодированному целому числу, список возвращается без каких-либо проблем. Однако, когда я использую объект с свойством, содержащим одно и то же целое число, список возвращается, но дататус не заполняется.

Список, который возвращается, я принимаю частные и общедоступные свойства. Жестко закодированный целочисленный список возвратов содержит все свойства, тогда как объект с списком возврата свойств содержит только частные свойства, а общедоступные свойства указывают: «Оценка функции отключена, потому что предыдущая оценка функции была отключена»

Example: 
 object.country 
      _countryid 
      _continentid 
      _countryname 
      CountryID 
      ContinentID 
      CountryName 

Вот два LinqToSql заявление (оба возвращает список элементов, но только один не бросает ошибку):

Рабочей LinqToSql Заявление

protected void rgcountry_NeedDataSource(object sender, EventArgs e) 
{ 
    List<db_entity.country> _clist; 
    using (db_era.era_entities _ee = new db_era.era_entities()) 
    { 
     _clist = (from a in _ee.countries where a.ContinentID == 4 select a).ToList(); 
    } 
    if (_clist.Count > 0) 
     this.rgcountry.DataSource = _clist; 
    else 
     this.rgcountry.DataSource = empty(); 
} 

неработающих заявление LinqToSql - (continentselected установлен и continentID имеет значение)

protected void rgcountry_NeedDataSource(object sender, EventArgs e) 
{ 
    List<db_entity.country> _clist; 
    if (continentselected != null) 
    { 
     using (db_era.era_entities _ee = new db_era.era_entities()) 
     { 
      _clist = (from a in _ee.countries where a.ContinentID == continentselected.ContinentID select a).ToList(); 
     } 
     if (_clist.Count > 0) 
      this.rgcountry.DataSource = _clist; 
     else 
      this.rgcountry.DataSource = empty(); 
    } 
    else 
     this.rgcountry.DataSource = empty(); 
} 

Что я здесь отсутствует? Или это работает LinqToSQL?

+0

Есть ли какая-либо логика в контенте ContinentID? Я также не вижу вызова для привязки данных ... –

+0

Вы уверены, что continentselected.ContinentID действительно имеет допустимое значение? Так как это целое число, по умолчанию оно равно 0. Вы уверены, что он установлен на 4? – neo

+0

@ Stephen Panzer: для Telerik RadGrid вам не нужна привязка данных. Что вы подразумеваете под контентом ContinentID? – mattgcon

ответ

0

Проблема заключается в следующем. continentselected извлекается с использованием другого контекста данных. И создается новый контекст данных для вашего запроса, говоря

using (db_era.era_entities _ee = new db_era.era_entities()) 

и continentselected не принадлежит к этому контексту. Linq to sql не будет работать с объектами из разных контекстов данных. Для вашего запроса используйте тот же контекст данных, который вы использовали для получения continentselected экземпляр объекта

+0

Это не будет возможным, так как ** континуум, выбранный **, поступает из другого datagrid, заполненного до того, как этот заселен, и обе сетки находятся в отдельных пользовательских элементах управления. Я даже извлек континент-идентификатор и поместил его в новую переменную (то есть байт-код), по существу, просто передав байт в .ContinentID, и он по-прежнему устраняет ту же проблему. – mattgcon

+0

Что вы имеете в виду, когда говорите: «continentselected исходит от другого datagrid»? Сетка может предоставить вам данные о строках, а сетки обычно возвращают объект типа. – neo

+0

Сетка страны находится на веб-странице с другой сеткой (континент), которая первоначально загружается при загрузке страницы. Затем пользователь должен выбрать континент, который затем загружает сетку страны. Сети Telerik немного странны, поскольку они возвращают datakeyvalues ​​не типы объектов в сетке. – mattgcon

Смежные вопросы