powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / The type 'T' must be a reference type in order to use it as parameter 'T' in the generic t
10 сообщений из 10, страница 1 из 1
The type 'T' must be a reference type in order to use it as parameter 'T' in the generic t
    #39323811
Pavluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как сделать так, чтобы метод
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
var v = Exist<LandCategoryType>(value, dbContext);

public bool Exist<T>(object id, IRightholderDbContext context) where T : class, IEntityKey
        {
            var values = context.Set<T>();

            return values.Any(t => t.Key == id);
        }



Использовал тип LandCategory, а не LandCategoryType

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
[DataContract]
    public class LandCategoryType : Rgi.Data.Rightholder.LandCategory, IEntityKey
    {
        public object Key
        {
            get
            {
                return this.Id;
            }
        }
    }
...
Рейтинг: 0 / 0
The type 'T' must be a reference type in order to use it as parameter 'T' in the generic t
    #39323843
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LandCategory - структура?

Кроме того, LandCategory, как я понимаю, не поддерживает интерфейс IEntityKey, то есть метод с ней все равно ничего сделать не сможет
...
Рейтинг: 0 / 0
The type 'T' must be a reference type in order to use it as parameter 'T' in the generic t
    #39323860
Pavluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Нет, класс.
Да, интерфейс только у LandCategoryType
...
Рейтинг: 0 / 0
The type 'T' must be a reference type in order to use it as parameter 'T' in the generic t
    #39323869
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так значит бесполезно пытаться что-то сделать с LandCategory c помощью Exist, так как Exist-у необходим этот интерфейс
...
Рейтинг: 0 / 0
The type 'T' must be a reference type in order to use it as parameter 'T' in the generic t
    #39323875
Pavluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Тогда как мне выполнить Exist хотя бы с базовым классом и даже зная имя ключевого поля?
...
Рейтинг: 0 / 0
The type 'T' must be a reference type in order to use it as parameter 'T' in the generic t
    #39323938
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
именно Exist никак не выполнить, потому что он требует интерфейс IEntityKey

может вам просто поиск нужен по Id?
используйте динамический Linq или сконструируйте нужный Expression
...
Рейтинг: 0 / 0
The type 'T' must be a reference type in order to use it as parameter 'T' in the generic t
    #39323944
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Proили сконструируйте нужный Expression
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
    /// <summary>
    /// Составляет выражение для фильтрации по указанному полю
    /// </summary>
    public static Expression<Func<T, bool>> ExpressionWhereOneField<T>(object value, string fieldName)
    {
      var param = Expression.Parameter(typeof(T));
      return
        Expression.Lambda<Func<T, bool>>(
          Expression.Equal(
            Expression.Property(
              param,
              fieldName
              ),
            Expression.Constant(value)
            ),
          param
          );
    }
...
Рейтинг: 0 / 0
The type 'T' must be a reference type in order to use it as parameter 'T' in the generic t
    #39324039
Pavluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

спасибо огромное. Я к этому и пришел, но пример найти не мог. Все работает отлично!!!
...
Рейтинг: 0 / 0
The type 'T' must be a reference type in order to use it as parameter 'T' in the generic t
    #39324044
Pavluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

А как добавить условие для нескольких полей?
...
Рейтинг: 0 / 0
The type 'T' must be a reference type in order to use it as parameter 'T' in the generic t
    #39324177
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По "И"? Или по "ИЛИ"?

По "И" можете использовать мою функцию в нескольких Where подряд. Или модифицируйте ее по аналогии. Или обратитесь к динамическому Linq
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / The type 'T' must be a reference type in order to use it as parameter 'T' in the generic t
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]