Форум программистов, компьютерный форум, киберфорум
Наши страницы
LINQ
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
anonimus
2158 / 1248 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
1

Вызов своей функции в Linq to SQL

10.08.2012, 16:22. Просмотров 1404. Ответов 6
Метки нет (Все метки)

Добрый день, в линк запросе хочу заюзать функцию, которая преобразовывает дату в нужный мне формат, в ходе работы программы получаю ошибку "cannot be converted to SQL."
Можно ли как-то использовать функции в linq ?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.08.2012, 16:22
Ответы с готовыми решениями:

Ускорение Linq to SQL (Compiled Linq, Entity SQL, и т.д.)
Здравствуйте! У меня задание стоит ускорить прогу. В проге во многих местах по куче Linq запросов....

Получить тип столбца из таблицы в SQL Server посредством Linq to SQL
Как получить тип столбца из таблицы в SQL Server посредством Linq to SQL или используя любой...

вызов хранимой процедуры с параметрами через dynamic data linq to sql
Добро! У меня есть БД (sql server r2). Там есть хранимая процедура. Я создал проект на asp.net...

Access2000: Можно ли в качестве источника поля в форме указать вызов своей функции ?
Access2000: Можно ли в качестве источника поля в форме указать вызов своей функции с параметрами,...

Перегрузить для формы метод перерисовки а конкретнее добавить в него вызов своей функции
мне нужно перегрузить для своей формы метод перерисовки а конкретнее добавить в него вызов своей...

6
y-fox
518 / 510 / 68
Регистрация: 19.09.2011
Сообщений: 826
10.08.2012, 16:27 2
В linq2objects - можно, в linq2sql - нельзя, если нужно, то преобразуйте запрос к Enumerable.
0
anonimus
2158 / 1248 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
10.08.2012, 16:33  [ТС] 3
что значит Enumerable ?

Добавлено через 1 минуту
в моем случаи выкрутился let'ом и тернарным оператором, но вопрос все же интересен мне
0
y-fox
518 / 510 / 68
Регистрация: 19.09.2011
Сообщений: 826
10.08.2012, 16:36 4
ну
C#
1
db.MyTable.AsEnumerable()//приведет к IEnumerable<T/*какой у вас класс*/>
и дальше вы с ним будете работать в памяти, а не приводить к sql-запроссу, только сначала вам нужно будет сделать выборку, иначе будете загружать всю таблицу.
Если покажите код, я помогу на конкретном примере.
0
anonimus
2158 / 1248 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
10.08.2012, 16:43  [ТС] 5
вот код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var formularList2 = (from stf in stf_StaffCard.Slice(ODate)
                             join pc in stf_PersonalCard.Slice(ODate) on stf.PersonalCardRef equals pc.Ref
                             let EndDate = stf.EndDate == Database.Current.DateTime_MinValue ? DateTime.MaxValue : stf.EndDate // сейчас делаю так
                             where pc.OrgRef == parameters.Organization
                             && stf.StaffPosition == parameters.StaffPositionCode
                             && stf.StaffCardType.UseInStaffList
                             && (EndDate > parameters.DateStart || stf.StartDate < parameters.DateEnd)
                             select new
                             {
                               StfRef = stf.Ref,
                               EndDate = stf.EndDate,
                               StartDate = stf.StartDate,
                               code = stf.Code
                             }).ToList();
а хочется видеть такой код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
var formularList2 = (from stf in stf_StaffCard.Slice(ODate)
                             join pc in stf_PersonalCard.Slice(ODate) on stf.PersonalCardRef equals pc.Ref
                             where pc.OrgRef == parameters.Organization
                             && stf.StaffPosition == parameters.StaffPositionCode
                             && stf.StaffCardType.UseInStaffList
                             && (MyFunction(EndDate) > parameters.DateStart || stf.StartDate < parameters.DateEnd)
                             select new
                             {
                               StfRef = stf.Ref,
                               EndDate = stf.EndDate,
                               StartDate = stf.StartDate,
                               code = stf.Code
                             }).ToList();
Добавлено через 2 минуты
код функции MyFunction
примерно такой
C#
1
2
3
4
5
6
    private static DateTime MyFunction(DateTime value) {
      if(value == Database.Current.DateTime_MinValue)
        return DateTime.MaxValue;
      else
        return value;
    }
0
y-fox
518 / 510 / 68
Регистрация: 19.09.2011
Сообщений: 826
10.08.2012, 17:03 6
MyFunction(EndDate) - Переменная EndDate - как я понял, не из запроса, ее можно вычислить и 1 раз:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
DateTime tmpDate = MyFunction(EndDate);
var formularList2 = (from stf in stf_StaffCard.Slice(ODate)
                             join pc in stf_PersonalCard.Slice(ODate) on stf.PersonalCardRef equals pc.Ref
                             where pc.OrgRef == parameters.Organization
                             && stf.StaffPosition == parameters.StaffPositionCode
                             && stf.StaffCardType.UseInStaffList
                             && (tmpDate > parameters.DateStart || stf.StartDate < parameters.DateEnd)
                             select new
                             {
                               StfRef = stf.Ref,
                               EndDate = stf.EndDate,
                               StartDate = stf.StartDate,
                               code = stf.Code
                             }).ToList();
0
anonimus
2158 / 1248 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
10.08.2012, 17:29  [ТС] 7
ой сори я виноват, не так написал второй код
C#
1
&& (MyFunction(stf.EndDate) > parameters.DateStart || stf.StartDate < parameters.DateEnd)
т.е. функции MyFunction я передаю поле объекта что вытаскиваю в запросе
0
10.08.2012, 17:29
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.08.2012, 17:29

Литература по EntityFramework, WCF, Linq to Objects, и Linq to SQL
Посоветуйте пожалуйста книги или статьи для освоения следующих вещей: EntityFramework, WCF, Linq to...

Вызов sql-функции
ALTER FUNCTION .(@id_route INT,@discount BIT,@goods BIT) RETURNS FLOAT AS BEGIN DECLARE @price...

Вызов функции SQL
Подскажите пожалуйста, как кодом C# вызвать функцию SQL


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.