Pouria Polouk Ответов: 2

Проблема с запросом LINQ to SQL в C#


Всем привет

Я использую LINQ to SQL в C#.
Существует контекст с именем “db”, который состоит из трех таблиц “hvl85, hvl86, hvl87”.
Во всех трех таблицах имеются аналогичные поля с различными записями.
Я хочу, чтобы все записи каждой таблицы отображались в DATAGRIDVIEW на основе выбранного числа всякий раз, когда пользователь выбирает одно из этих чисел: 85, 86 или 87.
Я решил написать только один запрос.
Я написал эти коды, как вы видите ниже, но я столкнулся с ошибкой.
Пожалуйста, помогите мне. Спасибо.

Что я уже пробовал:

Table<hvl85> table85 = db.GetTable<hvl85>();
Table<hvl86> table86 = db.GetTable<hvl86>();
Table<hvl87> table87 = db.GetTable<hvl87>();

Table<itable> mytable;

switch (number)
{
    case 85:
        mytable = table85;
        break;
    case 86:
        mytable = table86;
        break;
    case 87:
        mytable = table86;
        break;
}
var queryAllRecords = from q in mytable select q;
dataGridView1.DataSource = queryAllRecords;

Patrice T

- но я столкнулся с ошибкой.
Какой именно ?

2 Ответов

Рейтинг:
5

Richard Deeming

Цитата:
Не удается неявно преобразовать тип 'System.Data.Linq.Таблица<windowsapp.hvl85>' to 'System.Data.Linq.Таблица<system.data.linq.itable>'

То Table<T> класс, по-видимому, не является интерфейсом или типом делегата, поэтому он не может быть ковариантный[^] по его параметру универсального типа. Даже если hvl85 инвентарь ITable, вы не сможете назначить Table<hvl85> пример для а Table<ITable> переменная.

Вместо этого вам нужно будет использовать то System.Collections.IEnumerable интерфейс[^] для хранения запроса:
System.Collections.IEnumerable queryAllRecords;
switch (number)
{
    case 85:
    {
        queryAllRecords = db.GetTable<hvl85>();
        break;
    }
    case 86:
    {
        queryAllRecords = db.GetTable<hvl86>();
        break;
    }
    case 87:
    {
        queryAllRecords = db.GetTable<hvl87>();
        break;
    }
    default:
    {
        queryAllRecords = null;
        break;
    }
}

dataGridView1.DataSource = queryAllRecords;


Pouria Polouk

спасибо.
Но как я могу выбрать некоторые поля из таблицы с помощью метода?

Richard Deeming

queryAllRecords = db.GetTable<hvl87>l().Select(row => new { ... });

Или:
queryAllRecords = from q in db.GetTable<hvl87>() select new { ... };

Pouria Polouk

Спасибо

Рейтинг:
2

OriginalGriff

Вы не говорите нам, что это за ошибка, но наиболее вероятно, что это ошибка компиляции, говорящая о том, что переменная не была инициализирована:

Table<itable> mytable;

switch (number)
{
case 85:
mytable = table85;
break;
case 86:
mytable = table86;
break;
case 87:
mytable = table86;
break;
}
var queryAllRecords = from q in mytable select q;
Компилятор может видеть маршрут через этот код, которому не присваивается никакого значения. mytable : в частности, если number это не 85, 86 или 87.
Добавить а default обратитесь к вашему коммутатору, который обрабатывает эту возможность, и установите начальное значение.


Pouria Polouk

Спасибо за ваше внимание.
Несмотря на написание части по умолчанию, есть три ошибки, связанные с таблицами:

Не удается неявно преобразовать тип 'System.Data.Linq.Таблица<windowsapp.hvl85>' to 'System.Data.Linq.Таблица<system.data.linq.itable>'
Не удается неявно преобразовать тип 'System.Data.Linq.Таблица<windowsapp.hvl86>' to 'System.Data.Linq.Таблица<system.data.linq.itable>'
Не удается неявно преобразовать тип 'System.Data.Linq.Таблица<windowsapp.hvl87>' to 'System.Data.Linq.Таблица<system.data.linq.itable>'