.NET IQueryable MSSQL и ASP.NET WebAPI - PullRequest
       1

.NET IQueryable MSSQL и ASP.NET WebAPI

0 голосов
/ 27 сентября 2018

Случай следующий.

В приложении WPF есть DataGrid, который использует IQueryable в качестве ItemsSource (применить фильтрацию, сортировку, группирование, агрегации и т. Д.), У нас есть MSSQL Server DB, где хранятся данныеесли из приложения мы напрямую подключаемся к БД с помощью EF DbSet <> или ADO.NET Table <>, все работает отлично.Мы не хотим, чтобы приложение имело прямой доступ к БД, и целью является использование WebAPI между ними.DataGrid имеет свои собственные выражения генератора запросов, сгенерированный запрос выглядит как

.Call System.Linq.Queryable.Select(
.Call System.Linq.Queryable.GroupBy(
    .Call System.Linq.Queryable.Select(
        .Constant<Reports.ReportQuery>(Query(RepoService.Flight)),
        '(.Lambda #Lambda1<System.Func`2[RepoService.Flight,DynamicClass1]>)),
    '(.Lambda #Lambda2<System.Func`2[DynamicClass1,DynamicClass2]>)),
'(.Lambda #Lambda3<System.Func`2[System.Linq.IGrouping`2[DynamicClass2,DynamicClass1],Telerik.Pivot.Core.PivotResultItem]>))

Как я понимаю, OData не подходит для нашего случая.Мы пытаемся создать пользовательский IQueryable, и IQueryProvider получит выражение запроса в методе Execute провайдера, чтобы отправить его в WebAPI, который затем выполнит его в БД, отослать обратно результат и вернуть этот результат из метода Execute провайдера.

1) Это правильно / возможно?

2) Существуют ли какие-либо решения для этого случая?

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Я нашел решение для моей проблемы: Remote.LINQ

0 голосов
/ 28 сентября 2018

Может быть, я не все правильно понял, что вы можете спросить, но я попытаюсь ответить.

Если вы используете WPF для прямой связи с SQL-сервером, он использует специальный протокол через драйвер.Есть много статей, в которых рассказывается о SQL Server, так как это может быть и SQL Server, размещенный на MS Azure, и т. Д. Это как раз тот случай, когда вы захотите вернуться к SQL Server.

Если вы идете по пути креализуя свой бэкэнд через WebAPI, вы хотите убедиться, что вы реализуете все бэкэнд-маршруты, которые вам нужны для запроса информации, которая вам нужна в вашем приложении.OData - это своего рода протокол языка запросов поверх http.Таким образом, он реализует весь синтаксис запроса, который вам нужно перестроить самостоятельно, используя WebApi.

Тем не менее, не видя никакого вашего кода, довольно сложно обнаружить какие-либо ошибки.Но ... это учебник, как сделать запрос к веб-сервису через клиентскую библиотеку http и показать информацию в сетке данных wpf.Это может быть слишком долго для включения кода здесь и довольно легко Google.

https://www.c -sharpcorner.com / UploadFile / raj1979 / потребление-Asp-Net-web-api-using-httpclient-in-wpf /

В более серьезном приложении вы захотите иметь некоторые абстракции и слои, но в конце дня вы будете через web-интерфейс через web-клиент и анализировать json на объектыи связать это.IQueryable не является бесплатным и должен быть реализован, если вы не планируете использовать OData.Мне было бы проще реализовать то, что вам нужно для вашего приложения, и явно представить эти маршруты.

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

HTH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...