Вопросы с тегами [linq]

0

голосов
0

ответ
6

Просмотры

Linq, EF Ядро - группы на одном поле и использовать другое поле, чтобы получить список данных из другой таблицы

Кто-нибудь может мне помочь. Я попробовал все, ничего не получалось. У меня есть данные в этом формате table1 Id T_Id 4 2 6 5 6 7 table2 T_Id Fname LNAME 2 мэри кузнец 5 Джон Поуп 7 стив Блер Я хочу, чтобы получить данные в следующем формате, используя Linq запрос с EF Core. [{ "Идентификатор": "4", "пользователи": [{ "T_Id": 2, "имя_файла": "мэри", "LNAME": "Смит"}]}, { "Идентификатор": "6", "пользователи": [{ "T_Id": 5, "имя_файла": "Джон", "LNAME": "папа"}, { "T_Id": 7, "имя_файла": "стив", "LNAME": «Blair "}]}]
Shamal
1

голосов
2

ответ
1.9k

Просмотры

Get XElements List of XElements List from XML document using linq to xml

Я создаю список объектов, узлов: узел общественного класса {общественного строковый ключ {получить; задавать; } Публичная строка Значение {получить; задавать; }} ListNode общественного класса: List {} И у меня есть XML-документ: ххх 111 YYY 222 ZZZ 333 ааа 444, что я хочу сделать, это поместить эти XML-элементы в список объектов ListNode с помощью LINQ к XML: => Node Object => ListNode => Список это мой LINQ для запроса XML: Список listNodeDetails = XElement .Element ( "подробности") .elements ( "деталь") .elements ( "узел") .Select (п => новый узел () { ключ = n.Element ( "ключ") значение, значение = n.Element ( "узел") Элемент ( "значение") значение}) .ToList ()...;
YouneL
1

голосов
4

ответ
57

Просмотры

Сокращающая строка, переданная в списке

У меня есть список имен, которые я хочу сокращайте, но я хочу знать, существует ли встроенная функция для этого. например: John Doe -> JD Jane -> J Я пытаюсь что-то вдоль линий этого: myListOfNames.ForEach (х => х = Сокращать (х)); Я знаю, что может создать свою собственную функцию, чтобы сделать сокращения, но есть лучший способ сделать это, используя встроенные функции?
Omkar
1

голосов
1

ответ
44

Просмотры

IEnumerable.Except () на System.Linq.Enumerable + WhereSelectArrayIterator против List

Может быть, мне не хватает подробности здесь, но я бы ожидать, что IEnumerable.Except () будет работать на перечислимых конкретно не отданных в коллекцию. Поясню на простом примере: у меня есть список файлов каталога, и я хочу, чтобы исключить файлы, которые начинаются с определенной строки. вар allfiles = Directory.GetFiles (@ "C: \ Test \"). Выберите (е => новый FileInfo (е)); Получение как файлы сопоставления и тех, кто не соответствует бы вопрос определения одного из двух коллекций, а затем .Except () - ING на полный список, не так ли? вар соответствие = allfiles.Where (е => f.Name.StartsWith ( "ЗНАК")); и вар notmatching = allfiles.Except (согласование, новый FileComparer ()); Где FileComparer () некоторый класс, который сравнивает полный путь двух файлов. Ну, если я не отбрасываю оба из трех коллекций в список, последняя переменная notmatching все еще дает мне полный список файлов, после того как я .Except () по сбору соответствия. Для того, чтобы быть ясно: вар allfiles = Directory.GetFiles (@ "C: \ Test \") Выберите (е => новый FileInfo (е));. вар соответствие = allfiles.Where (е => f.Name.StartsWith ( "ЗНАК")); вар notmatching = allfiles.Except (согласование, новый FileComparer ()); не исключает, а вар allfiles = Directory.GetFiles (@ "C: \ Test \") Выберите (F => новый FileInfo (F)) ToList ();.. вар соответствие = allfiles.Where (е => f.Name.StartsWith ( "ЗНАК")) ToList (). вар notmatching = allfiles.Except (согласование, новый FileComparer ()) ToList (). на самом деле делает то, что говорит на олове. Что я здесь отсутствует? Я не могу понять, почему LINQ не манипулирует коллекции в настоящее время не подавал в список. Например, FileComparer даже и не дозвонился в первом случае. внутренний класс FileComparer: IEqualityComparer {общественный BOOL Equals (FileInfo х, FileInfo у) {вернуться х == NULL? у == NULL: (x.Name.Equals (y.Name, StringComparison.OrdinalIgnoreCase) && x.length == y.Length); } Общественного ИНТ GetHashCode (FileInfo объект) {вернуться obj.GetHashCode (); }}
SimoneF
1

голосов
1

ответ
50

Просмотры

Как использовать LINQ для .select из списка внутри карты?

Я пытаюсь .select определенных элементов из списка, которые хранятся внутри словаря. внутренний словарь teamkillCounter = новый словарь (); класс Teamkill {общественная строка killerName; публичная строка killerSteamId; общественный TeamRole killerTeamRole; строка victimName общественности; публичная строка victimSteamId; общественный TeamRole victimTeamRole; общественный DamageType damageType; } // quotedArgs [1] это имя убийцу разыскивается // Первой попытки Списка смерти = this.plugin.teamkillCounter.Select (х => x.Value.Select (у => y.killerName.Contains (quotedArgs [1 ..])) В ролях ()) В ролях () Одно (). // Вторых список попытки смерти = новый список (); = смерти this.plugin.teamkillCounter.Values.SelectMany (х => х) .ToList (); = смерти teamkills.Where (у => y.killerName.Contains (quotedArgs [1])) ToList ().
PatPeter
1

голосов
1

ответ
1.1k

Просмотры

Значение EF Выберите MAX, который

Я не могу понять, как с помощью EF, чтобы выбрать DB строку, на основе максимального значения, но которым меньше или равна 5. Вот мой код, но это будет выбрать только значение, а не всю строку: Цены PR = дб. Prices.Where (ы => s.numdays s.numdays) Спасибо за ваше время!
CodeDemen
1

голосов
0

ответ
150

Просмотры

Повышение производительности с помощью Entity Framework 6 скомпилирован запросов

Из Составитель запросы документации: Начиная с .NET Framework 4.5, LINQ запросы кэшируются автоматически. Тем не менее, вы все еще можете использовать скомпилированные запросы LINQ, чтобы уменьшить эти затраты в последующих казней и скомпилированных запросов может быть более эффективным, чем LINQ запросов, которые автоматически кэшируются. Обратите внимание, что LINQ к Entities запросов, которые применяют оператор Enumerable.Contains в памяти коллекции автоматически не кэшируются. Также параметрирования в памяти коллекции в скомпилированных запросов LINQ не допускается. Так это значит, что LINQ запросы в Entity Framework 6.x еще нужно перевести на реальных команд SQL на лету? и может быть улучшена с классом CompiledQuery? Спасибо
user3723486
1

голосов
1

ответ
221

Просмотры

LINQPad - Linq к Sql неоднозначного стола и связанное имя сервера

Использование LINQPad & Linq к Sql, я пытаюсь соединить некоторые данные из таблицы в базе данных для данных, который содержится на связанном сервере. Я следовал инструкциям, чтобы создать соединение с связанным сервером (http://www.linqpad.net/FAQ.aspx#cross-database) Моя проблема, кажется, что у меня есть таблица в базе данных, скажем, это под названием «MyData», и база данных в связанном сервере и с таким же именем ( «MyData». Когда я пытаюсь ссылаться на «MyData» в запросе я показан CS0229 Неоднозначность ошибки между «TypedDataContext.MyData» и «TypedDataContext. MyData»Я знаю, что настройки подключения к связанному серверу правильно, потому что я могу создать подключение к другой базе данных на связанном сервере, один, который не имеет конфликта имен, и я в состоянии успешно запросить от этой связанной базы данных. Есть ли способ, что я могу указать точно таблицу или связанную базу данных сервера, или LINQPad генерировать уникальные имена для двух элементов в вопросе?
Mike B
1

голосов
1

ответ
69

Просмотры

C # GroupBy в запросе

У меня есть 3 наборов данных. Один для автомобилей (авто), который прилагается к марке и модели (Autotype) и владелец (Eigenaar) общественного класса Auto: BaseDbEntity {публичная строка Kleur {получить; задавать; } Общественного DateTime DatumGekocht {получить; задавать; } Публичная строка Nummerplaat {получить; задавать; } // Связи с общественностью Eigenaar HuidigeEigenaar {получить; задавать; } Общественного Autotype HuidigeAutoType {получить; задавать; }} Общественного класса Autotype: BaseDbEntity {публичная строка Мерк {получить; задавать; } Публичная строка Model {получить; задавать; }} Общественного класса Eigenaar: BaseDbEntity {публичная строка Voornaam {получить; задавать; } Публичная строка Achternaam {получить; задавать; } Публичная строка НА => $ "{Voornaam} {Achternaam}"; } Я пытаюсь запросить, чтобы получить следующий результат: Per Мерк (бренд) Я хотел бы перечислить все автотехники (легковые автомобили), с их соответствующим владельцем (eigenaar). Для того, чтобы просто получить список всех автомобилей с соответствующими владельцами и брендами у меня есть следующий код работа: общественный Список GetAllAutosSortedByName (критерии AutoCriteria) {возвращение GetFullyGraphedAutos () .гд (х => string.IsNullOrEmpty (criteria.Name)) .OrderBy ( х => x.Id) .ToList (); } Частная IQueryable GetFullyGraphedAutos () {вернуть _entityContext.Autos .INCLUDE (х => x.HuidigeAutoType) .INCLUDE (х => x.HuidigeEigenaar); } Мой вопрос, как я группировать их по брендам (Мерк). Я пытался что-то вдоль линий этого: общественный Список GetAllMerkenSortedByMerk (критерии AutoCriteria) {возвращение GetFullyGraphedAutos () .гд (х => струнного. IsNullOrEmpty (criteria.Name)) .GroupBy (х => x.HuidigeAutoType.Merk) .ToList (); } Очевидно, что это не работает, но я не знаю, как еще я должен запросить это. Вот визуальное представление: Столешница того, что я в настоящее время работаю, а нижний из которых разыскиваемого результата.
Robbe R
1

голосов
1

ответ
42

Просмотры

Отправка Entity по электронной почте с помощью Mailer ASP.net

Попытка разработать приложение, где, когда пользователь применяет для назначения, они получают подтверждение по электронной почте о том, что назначение было получено с подробным описанием в электронной почте. У меня есть запрос Linq (после назначения создается), чтобы получить свои данные из базы данных. Я отлажена приложение, и детали проходят по методе почтовой программы. Тем не менее, я получаю пустое сообщение. Это что-то делать с ViewBag.Data? Вот где я посылаю детали: вар приложение = (от в db.Appointments где appointments.AppointmentId == a.AppointmentId выбрать) .FirstOrDefault () UserMailer.AppointmentDetails (приложение) .send (); Мой метод почтовой программы: общественное AppointmentDetails виртуальных MvcMailMessage (назначения назначения) {ViewBag.Data = назначение; вернуться Заполнить (х => {X.Subject = "Назначение Деталь"; x.ViewName = "AppointmentDetails"; x.To.Add (appointment.ApplicantEmail); }); } Наконец, вид на адрес электронной почты: Ежедневники Детали @ ViewBag.Data: Добро пожаловать в App и наслаждаться вашим временем!
Anna Doe
1

голосов
1

ответ
278

Просмотры

Разобрать строку, используя C # LINQ

Нужна помощь в синтаксического анализа строки с помощью C # LINQ У меня есть строка, как этот 11 = 205129022,453 = 8448 = CompanyID, 447 = D, 452 = 63,448 = идентификатор пользователя, 447 = D, 452 = 11,448 = CompanyName, 447 = D, 452 = 13448 = W, 447 = D, 452 = 54,77 = O, 555 = 2 Я хотел бы разделить эту строку на 448 = затем взять массив начать получать строку «начинается с 448» получить последнюю строку в строке, которая 452 = Я пытаюсь эту логику с помощью LINQ, чтобы получить конечный результат, но это не работает. вар стороны = rptstr.Split (новая строка [] { "453 ="}, StringSplitOptions.None) .Select (р => p.Split (новая строка [] { "448 ="}, StringSplitOptions.None); вар str448 = (от lnprty в партиях, где lnprty.ToString (). StartsWith ( "448 =") // пусть TMP = line1. К списку(); Я могу разделить линию на 448, но 448 строк приходит без 448 =, так как он был разделен, мне нужно разбить строку и в строке, так что я могу определить линию. Pls. помните последнюю строку приходит с другими строками в конце (448 = 447 Вт, = D, 452 = 54,77 = О, 555 = 2). Я должен получить конечный результат, как, где 452 = 63 Get CompanyID (который находится в 447 =), 452 = 11 Get идентификатор пользователя, 452 = 13 Get CompanyName Спасибо заранее.
Moh Mah
1

голосов
0

ответ
309

Просмотры

Изменение названия свойств, сохраненных в Космосе Db без использования атрибута JsonProperty

Мне нужно, чтобы изменить имя свойства, сохраненное в Космосе Дб. Я не хочу, чтобы использовать атрибут JsonProperty из Newtonsoft.Json, потому что использование его имеет эффект всегда меняют названия отеля, а также в ответ JSON, когда я звоню метод действия. Поэтому я хотел бы, что только JSON сохранены в космос Db имеет разные имена свойств. Чтобы сделать это, я создал пользовательский атрибут с именем CosmosDbPropertyAttribute следующим образом: [AttributeUsage (AttributeTargets.Property)] CosmosDbPropertyAttribute общественного класса: Атрибут {общественных струнным ИмениСвойство {получить; задавать; } Общественных CosmosDbPropertyAttribute (строка PropertyName) {ИмяСвойства = PropertyName; }} Ниже приведен класс образец, который использует атрибут CosmosDbProperty: общественный абстрактный класс CosmosDbDocumentBase: ICosmosDbDocument {[CosmosDbProperty (» FirstOrDefault () является CosmosDbPropertyAttribute PropertyAttribute) {jsonProperty.PropertyName = PropertyAttribute.PropertyName; вернуться jsonProperty; } Еще {вернуть jsonProperty; }}} Проблема теперь для запросов к базе данных. Когда я сделать запрос LINQ, как этот вар _DbClient = новый DocumentClient (новый Uri ( "_ БД URI_"), "_DB KEY_", новые JsonSerializerSettings () {ContractResolver = новый CosmosDbDefaultContractResolver ()}, connectionPolicy); . Вар Запрос = _DbClient.CreateDocumentQuery (), где (а => a.DocumentType == 0) .AsEnumerable (); оператор запроса является неправильным, поскольку относятся к первоначальному названию свойства DocumentType вместо DT, указанное в атрибуте CosmosDbProperty поэтому запрос не удается.
Matteo
1

голосов
1

ответ
78

Просмотры

convert SQL to LINQ not working

Я хочу, чтобы преобразовать этот SQL-код в LINQ. Вот мой SQL-код: SELECT Rooms.RoomName AS RoomNo, Beds.BedName А.С. Кровати, Rooms.RoomType, ISNULL (CheckIn.CheckIntatus, '') AS Статус ОТ CheckIN INNER JOIN GuestBeds ON CheckIn.GuestBedId = GuestBeds.Id И (CheckIN .CheckInStatus = 1 ИЛИ CheckIn.CheckIntatus = 2 или CheckIn.CheckSIntatus = 3) RIGHT JOIN кровати на GuestBeds.BedId = Beds.Id INNER JOIN Номера на Beds.RoomId = Rooms.Id LEFT JOIN гостей на CheckIn.GuestId = Guests.Id ГДЕ Beds.Active = 1 И Rooms.Active = 1 ORDER BY RoomName, Кровати он хорошо работает, что означает, что показывает все RoomName с CheckInStatus. Если номер не присутствие в CheckIN таблице, Ot возвращает статус Null. Поэтому я хочу, чтобы преобразовать код LINQ. Так вот мой LINQ код: от б в кровати присоединиться к ж в номерах на b.RoomsId равна w.Id где (a.CheckInStatus == 3 || а. CheckInStatus == 1 || a.CheckInStatus == 2) присоединиться к р в GuestBeds на b.Id равна p.BedId присоединиться к в CheckIN на p.Id равно a.GuestBedId присоединиться к т в гости на a.GuestId равна t.Id где b.Active == верно && w.Active == истинный OrderBy w.RoomName выберите новый {RoomName = w.RoomName, BedName = b.BedName, Status = a.CheckInStatus} Оно не работал, как первый код. Это показывает только данные, которые содержат CheckInStatus. Я хочу, чтобы показать все RoomName внутри базы данных в номерах CheckInStatus} Оно не работал, как первый код. Это показывает только данные, которые содержат CheckInStatus. Я хочу, чтобы показать все RoomName внутри базы данных в номерах CheckInStatus} Оно не работал, как первый код. Это показывает только данные, которые содержат CheckInStatus. Я хочу, чтобы показать все RoomName внутри базы данных в номерах
yusry
0

голосов
0

ответ
6

Просмотры

MVC Error - Требуется модель элемента типа IEnumerable

Я новичок в MVC, так и LinqToSql. Я пытаюсь создать небольшое приложение, которое содержит список контактов, используя обе технологии. Моя модель: класс Contact общественности {[Key] общественности INT Id {получить; задавать; } [Требуется] публичная строка Name {получить; задавать; } [Диапазон (18, 99)] общественного ИНТ? Возраст {получить; задавать; } [EmailAddress] публичная строка E-mail {получить; задавать; } [Телефон] публичная строка Телефон {получить; задавать; } Общественного гендер? Пол {получить; задавать; } Публичная строка адреса {получить; задавать; }} Общественного перечисление Пол {Мужчина, Женщина} Мой контроллер: класс ContactController общественности:. Контроллер {частная строка CONSTR = ConfigurationManager.ConnectionStrings [ "Промстройпроект"] ConnectionString; частный LinqToSqlDataContext дБ; ActionResult индекс общественности () {используя (дб = новая LinqToSqlDataContext (CONSTR)) {вар контакты = (IEnumerable) (от гр в db.Contacts выберите с); вернуться View (контакты); }} Мой Вид: @model IEnumerable @ {ViewBag.Title = "Index"; Макет = "~ / Views / Shared / _Layout.cshtml"; } @ Html.DisplayNameFor (модель => model.Name) ... @foreach (вар элемент в модели) {@ Html.DisplayFor (ModelItem => item.Name) ...} Когда я запускаю это я получаю следующее сообщение об ошибке : модель элемент передается в словарь типа 'System.Data.Linq.DataQuery`1 [ContactsApp.Contact], но этот словарь требует модель элемента типа «System.Collections.Generic. IEnumerable`1 [ContactsApp.Models.Contact]. Я понимаю, что View ожидает IEnumerable параметра. Я бросил запрос на IEnumerable, но я все еще получаю ошибку. Я ценю помощь в понимании того, что именно я делаю неправильно и что является наиболее эффективным способом решить эту проблему.
Jadenkun
1

голосов
2

ответ
282

Просмотры

LINQPAD - PredicateBuilder throwing error

Когда я запускаю заявление ниже в LINQPad это метание следующее сообщение об ошибке: Тип выражения узла LINQ «Invoke» не поддерживается в LINQ к Entities. Это, кажется, соответствует некоторым из других примеров, которые я видел в Интернете. Что я делаю неправильно? LINQPad версия 5 Язык: C # Заявление Connection: # проект C DLL, содержащий Entity Framework уаг dynamicGlobalFilter = PredicateBuilder.True (); dynamicGlobalFilter = dynamicGlobalFilter.And (х => x.username.Contains ( "W")); Тест переменная = users.Where (dynamicGlobalFilter); test.Dump (); Примечание: Я включил PredicateBuilder в LINQPad нажатия клавиши F4 в моем окне запроса и флажок. UPDATE (FIX!): Нажмите F4 в окне запроса в LINQPad Под Дополнительные ссылки нажмите ADD Нажмите кнопку Обзор Расположить LinqKit.dll на диске (загруженном на сайте LinqKit) .. если вы»
spyder1329
1

голосов
2

ответ
355

Просмотры

Linq Включает Alternative

Я являюсь загружая объект из базы данных, как так вар profileEntity = ждут Context.Profiles .INCLUDE (X => x.MedicalRecords) .INCLUDE (х => x.DrugHistory) .INCLUDE (х => x.EmploymentStatus) .SingleOrDefaultAsync (х => x.Id == ID); Все работает отлично, мне было просто интересно, если есть лучший способ включить его удобства общих свойств типа, а с помощью метода Include потому, что эта организация имеет много свойств, мне нужно, чтобы включить
Ben Donnelly
1

голосов
1

ответ
46

Просмотры

LINQ с двумя из статей

Как умножить каждый элемент из одного массива на весь элемент в другом массиве? Output1 нужен только один оператор Еогеасп в то время как Выход2 нужен вложенный цикл. Есть эквивалентный способ записи запроса в один лайнер? Там должен быть метод LINQ, что я не в курсе двойной [] thisCurrency = {1234, 1000, 50, 20}; двойной [] otherCurrency = {0,01937, 2,1278, 21,014}; // каждый элемент thisCurrency умножается на каждый элемент на otherCurrency вар output1 = от р в thisCurrency из о в otherCurrency выбрать р * о; вар выход2 = thisCurrency.Select (localCurrency => otherCurrency.Select (oCurrency => oCurrency * localCurrency)); Еогеасп (вар валют на выходе) {Console.WriteLine (валюта); } Извините за вопрос новичка
Sean Ervinson
1

голосов
3

ответ
73

Просмотры

LINQ Nested query with appropriate quantifiers and restrictions

У меня есть две таблицы А и В, как показано ниже: Таблица A WXy 1 7 5 2 0 7 3 1 7 4 4 4 5 4 7 Таблица B QZCD 1 1 7 5 2 1 0 7 3 1 1 7 4 1 4 4 я хочу получить эти значения W, для которых сочетание Х и Y точно соответствует те комбинации C & D в таблице B, для которых Z = 1. Я попытался следующий запрос: вар запроса = A.Where (и => B.Where (а = > Az == 1) .Select (а => Ac) .Contains (иХ)) .где (и => B.Where (а => Az == 1) .Select (а => Р.Х.) .Contains (UY )) .Select (а => новый {WIDS = Aw}); поэтому в указанных выше случаях, результат запроса должен дать: W = {1,2,3,4}, однако я получаю дополнительное значение 5, а также. W = {1,2,3,4,5}. Я думаю, что не рассматривает сочетание в целом. Может кто-нибудь помочь мне, что я делаю неправильно в этом запросе?
AKA
1

голосов
1

ответ
77

Просмотры

Метод результат GroupBy

Как можно группировать по методу результат? вар группа = invoices.GroupBy (х => новый {x.User.IdUser, x.PriceCatId, x.Destination, OrderHelper.ViewCyclesNames (x.Order.History.catId), x.Cate}) ToList (). Компилятор не принимает OrderHelper.ViewCyclesNames (x.Order.History.catId), в качестве группы по параметру. Как я могу решить эту проблему?
Maro
1

голосов
0

ответ
127

Просмотры

В любом случае, чтобы избежать бокса / распаковки в LINQ

Я пытаюсь написать выражение Linq, который проверяет, соответствует ли какой-либо элемент в списке объектов с предикатом. защищенные переопределения недействительного ValidateRulesBeforeDelete (Список deleteRecords) {base.ValidateRulesBeforeDelete (deleteRecords); вар defaultProductStatus = GetDefaultProductStatus (); если (deleteRecords.Any (X => x.equals (defaultProductStatus.Id))) {бросить новый CustomException (PageResource.ProductStatusViewModel_CannotDeleteDefaultProduct); }} Общественного класса ProductStatusViewModel {общественного ИНТ Id {получить; задавать; }} Приведенный выше код работает нормально. Но, в последнее время я прочитал о боксе / распаковке в CLR Via C # и мои сомнения, применить выше предиката будет составитель окно целого объект для каждого элемента в списке ?? Я 100% уверен, что все время список содержит целые числа в штучной упаковке в качестве объекта.
Rudresha Parameshappa
1

голосов
0

ответ
173

Просмотры

C # LINQ список выберите столбцы динамически присоединяемый набор данных

Я использую LINQ соединить 2 DataTables: вар JoinResult = (от р в WZdt.AsEnumerable () присоединиться к т в WZIdt.AsEnumerable () на p.Field ( "ID") равна t.Field ( "ID") выберите новый {р, т}) ToList (). WZdt и WZIdt являются DataTables. Обычно, когда хотел указать столбцы, я бы написать что-то вроде этого: вар JoinResult = (от р в WZdt.AsEnumerable () присоединиться к т в WZIdt.AsEnumerable () на p.Field ( «ID») равна t.Field ( "ID ") выберите новый {FileNo = p.Field (" FileNo "), Заголовок = p.Field ( "Заголовок"), М1 = t.Field ( "М1"), RecCount = t.Field ( "RecCount")}) ToList (). Но эти исходные DataTables создаются динамически на основе некоторой логики, поэтому они могут отличаться, когда речь идет о Колонных у них есть. Я хотел бы применить похожую логику для выбора части LINQ, но я не знаю, как. Могу ли я построить массив столбцов так или иначе, как [p.FileNo, p.Title, t.M1, t.RecCount]? Или любой другой способ? Но эти исходные DataTables создаются динамически на основе некоторой логики, поэтому они могут отличаться, когда речь идет о Колонных у них есть. Я хотел бы применить похожую логику для выбора части LINQ, но я не знаю, как. Могу ли я построить массив столбцов так или иначе, как [p.FileNo, p.Title, t.M1, t.RecCount]? Или любой другой способ? Но эти исходные DataTables создаются динамически на основе некоторой логики, поэтому они могут отличаться, когда речь идет о Колонных у них есть. Я хотел бы применить похожую логику для выбора части LINQ, но я не знаю, как. Могу ли я построить массив столбцов так или иначе, как [p.FileNo, p.Title, t.M1, t.RecCount]? Или любой другой способ?
PRHMN
1

голосов
1

ответ
109

Просмотры

Как избежать Entity Базовых рамок OrderBy свойства списка от делать Top (1) для каждого списка элемента в базе данных?

Я сделать запрос к базе данных с помощью EF Ядро 2.0.1 и, в частности, в NuGet пакет Microsoft.EntityFrameworkCore.SqlServer 2.0.1. Вот мои модели: открытый класс Foo {общественности Foo () {Id = Guid.NewGuid (); } Общественного Guid Id {получить; защищенный набор; } Общественного IEnumerable Bars {получить; задавать; }} Класс Бар общественных {общественный бар (строковое значение, Guid anotherId) {Id = Guid.NewGuid (); Значение = значение; AnotherId = anotherId; } Защищенный Bar () {} общественного Guid Id {получить; защищенный набор; } Общественного Guid AnotherId {получить; защищенный набор; } Публичная строка Значение {получить; защищенный набор; }} Создать 10 Foo экземпляров, которые имеют список штриховых экземпляров 2 каждый и сохранить, что в базу данных. Когда я пытаюсь и порядок свойством Bar.Value где AnotherId равно anotherId2, это делает в общей сложности 30 вызовов в базе данных. Вот мои настройки и запрос на заказ по свойству значения на экземпляре бара, где он имеет anotherId2: Guid anotherId1 = Guid.NewGuid (); Guid anotherId2 = Guid.NewGuid (); используя (DbContext DbContext = GetDbContext ()) {dbContext.Add (новый Foo {Bars = новый [] {нового бара ( "А", anotherId1), новый бар ( "Z", anotherId2)}}); dbContext.Add (новый Foo {Барс = новый [] {новый бар ( "б", anotherId1), новый бар ( "у", anotherId2)}}); dbContext.Add (новые Foo {Барс = новый [] {новый бар ( "с", anotherId1), новый бар ( "х", anotherId2)}}); dbContext.Add (новый Foo {Барс = новый [] {нового бар ( "d", anotherId1), новый бар ( "V", anotherId2)}}); dbContext.Add (новый Foo {Барс = новый [] {нового бар ( "е", anotherId1), новый бар ( "ш", anotherId2)}}); DbContext. Добавить (новый Foo {Bars = новый [] {новый бар ( "F", anotherId1), новый бар ( "U", anotherId2)}}); dbContext.Add (новый Foo {Барса = новый [] {нового бар ( "г", anotherId1), новый бар ( "Т", anotherId2)}}); dbContext.Add (новый Foo {Барс = новый [] {нового бар ( "ч", anotherId1), новый бар ( "s", anotherId2)}}); dbContext.Add (новые Foo {Барс = новый [] {новый бар ( "я", anotherId1), новый бар ( "г", anotherId2)}}); dbContext.Add (новый Foo {Барс = новый [] {нового бар ( "J", anotherId1), новый бар ( "д", anotherId2)}}); dbContext.SaveChanges (); } Используя (DbContext DbContext = GetDbContext ()) {// К этому моменту, только 7 вызовов внесены в список базы данных FOOS = ждут dbContext.Set (). Include (х => x.Bars) .OrderBy (х => x.Bars.First (у => y.AnotherId == anotherId2) .Value). ToListAsync (); Assert.That (foos.First () Bars.Any (х => x.Value == "Q"), Is.True.); } Когда я использую SQL Profiler это показывает 30 SQL запросов к базе данных! Есть 20 вызовов, которые выглядят как ниже запрос, по одному для каждого перечисления anotherId2 и экземпляра бара:. Exec sp_executesql N'SELECT TOP (1) [y0] [Value] FROM [бар] AS [y0] WHERE ([y0 ]. [AnotherId] = @__ anotherId2_0) И (@_outer_Id = [у0]. [FooId])», N '@__ anotherId2_0 UniqueIdentifier, @ _ ​​outer_Id UniqueIdentifier', @ __ anotherId2_0 = '0AC1FBCA-6DEF-4F50-B4AA-CEC7286135B8', @ _outer_Id = «A6A1785A-B313-4EE7-A0B6-307F54D6F74A» Как я могу остановить это делает эти 20 звонков в базу данных, но все еще заказать Foo путем значения в случае anotherId2? } Когда я использую SQL Profiler это показывает 30 SQL запросов к базе данных! Есть 20 вызовов, которые выглядят как ниже запрос, по одному для каждого перечисления anotherId2 и экземпляра бара:. Exec sp_executesql N'SELECT TOP (1) [y0] [Value] FROM [бар] AS [y0] WHERE ([y0 ]. [AnotherId] = @__ anotherId2_0) И (@_outer_Id = [у0]. [FooId])», N '@__ anotherId2_0 UniqueIdentifier, @ _ ​​outer_Id UniqueIdentifier', @ __ anotherId2_0 = '0AC1FBCA-6DEF-4F50-B4AA-CEC7286135B8', @ _outer_Id = «A6A1785A-B313-4EE7-A0B6-307F54D6F74A» Как я могу остановить это делает эти 20 звонков в базу данных, но все еще заказать Foo путем значения в случае anotherId2? } Когда я использую SQL Profiler это показывает 30 SQL запросов к базе данных! Есть 20 вызовов, которые выглядят как ниже запрос, по одному для каждого перечисления anotherId2 и экземпляра бара:. Exec sp_executesql N'SELECT TOP (1) [y0] [Value] FROM [бар] AS [y0] WHERE ([y0 ]. [AnotherId] = @__ anotherId2_0) И (@_outer_Id = [у0]. [FooId])», N '@__ anotherId2_0 UniqueIdentifier, @ _ ​​outer_Id UniqueIdentifier', @ __ anotherId2_0 = '0AC1FBCA-6DEF-4F50-B4AA-CEC7286135B8', @ _outer_Id = «A6A1785A-B313-4EE7-A0B6-307F54D6F74A» Как я могу остановить это делает эти 20 звонков в базу данных, но все еще заказать Foo путем значения в случае anotherId2?
chris31389
1

голосов
0

ответ
59

Просмотры

Как показывают дублированные данные один раз в выпадающем списке?

Я работаю в списке, получить данные из базы данных, что один учитель может научить многие студента одного класса я хочу показать, что класс только один раз, а не его показать ему много времени в раскрывающемся списке, как показано ниже, код из выпадающего списка @ Html.DropDownListFor (м => m.subject, новый SelectList (ViewBag.subject, "CLassSubjectId", "objsub"), "Select", новый {@class = "форм-контроль"}) Linq запрос: (от т в db.TeacherEnroll из s в db.EnrollInClass.Where (ы => s.BranchClassesId == t.BranchClassesId && s.ClassSubject.SubjectId == t.SubjectId && t.Teacher.TeacherName.Equals (CurrentUser)) выберите ы) ;
hassan khan
1

голосов
1

ответ
104

Просмотры

Возвратить выберите LINQ непосредственно или присвоить значение переменной перед тем [закрыт]

Какой из этого имеет смысл и более удобным для чтения? Возвратить выберите LINQ непосредственно или присвоить значение переменной раньше? общественные динамические имена (Список лиц) {выход вар = persons.Select (х => новый {Name = x.Name, Age = x.Age}) ToList (). вернуть выход; } Или это? общественные динамические имена (Список лиц) {вернуться persons.Select (х => новый {Name = x.Name, Age = x.Age}) ToList (). }
psvieira.ti
1

голосов
0

ответ
85

Просмотры

Нет ошибки оператора принуждения с Linq запросом с выбрать новый

Я использую UWP, Sqlite и Linq сделать ObservableCollections, чтобы связываться с моей XAML ListViews. Никаких проблем до сих пор. Далее я хотел бы иметь результаты присоединиться запроса в список, а также связываться с Listview. Это приводит к ошибке, даже с упрощенным кодом ниже: BooksAndSeries общественного класса {общественного Int PublYear {получить; задавать; } Публичная строка SeriesName {получить; задавать; } Публичная строка Title {получить; задавать; }} общественности статической Список SelBooksSeries {получить; задавать; } Государственной статической силы LoadSearchedBooks () {используя (CatDataContext catDB = новый myBooks.Model.CatDataContext ()) {вар SearchedBooks = из книги бб в catDB.Books выбрать новые BooksAndSeries {PublYear = bb.PublYear, Title = bb.Title}; SelBooksSeries = новый список (SearchedBooks); }} Запрос выдает ошибку: System.InvalidOperationException HResult = 0x80131509 сообщение = Нет Оператор принуждения не определен между «myBooks.GenModule + BooksAndSeries» типов и «myBooks.Model.Book». Источник = StackTrace: Я использую последний выпуск Microsoft VS Community и Microsoft.EntityFrameworkCore.Sqlite 1.1.5.
hwjSoftware
1

голосов
1

ответ
42

Просмотры

For DataContext, GetChangeSet stops working after SubmitChanges

В нашем проекте, у нас есть несколько объектов System.Data.Linq.DataContext для различных форм Windows. Когда DataBound управления на форме изменяются (например, имя), мы включить или отключить кнопку Сохранить, проверив метод GetChangeSet. частные недействительными ContentChanged (объект отправителя, EventArgs е) {изменения вар = GetChangeSet (); INT numChanges = changes.Deletes.Count + changes.Inserts.Count + changes.Updates.Count; btnSubmit.Enabled = (numChanges> 0); } Когда Сохранить будет нажата кнопка, мы называем SubmitChanges на Linq DataContext с последующим вызовом расширения ClearCache на DataContext: BOOL IFormPanelAccessor.CommitChanges (T запись) {_dc.SubmitChanges (); _dc.ClearCache (); } ClearCache определяется в статическом классе расширений следующим образом: государственной статической силы ClearCache (это DataContext постоянного тока) {dc.GetType (). InvokeMember ( "ClearCache", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.InvokeMethod, нуль, постоянный ток, нуль); } После сохранения не последующие изменения в DataContext больше не обнаруживается с GetChangeSet. Существует триггер в базе данных, которая вызывается после вставки или обновления. Будет ли это какое-то образом нарушить способность DataContext для обнаружения изменений? Как получить GetChangeSet для обнаружения изменений на привязке к данным управления после вызова SubmitChanges? s способность обнаруживать изменения? Как получить GetChangeSet для обнаружения изменений на привязке к данным управления после вызова SubmitChanges? s способность обнаруживать изменения? Как получить GetChangeSet для обнаружения изменений на привязке к данным управления после вызова SubmitChanges?
jp2code
1

голосов
1

ответ
48

Просмотры

Count across multiple fields / columns inside foreach loop

Я использую этот код: уаг mydynlist = AsDynamic (App.Data [ "mydynlistsource"]); Еогеасп (вар д в mydynlist) {... @ q.a1 @ q.b1 @ q.b2 @ q.b3 ...} и это правильно заменяет значения с зп на / TD> s Каждое поле может принимать значения «с», «н» или «на». Я использую эти 4 в качестве примеров, но есть более 50 полей. Мне нужно, чтобы добавить новую строку с общим числом полей со значением «S». Я попытался с помощью этого решения, которое работает за пределами цикла: Еогеасп (вар Q в auditorias) {... @ q.SelectMany (я => новая строка [] {i.a1, i.b1, i.b2, i.b3 }) .Count (я => я == "s") @ q.a1 @ q.b1 @ q.b2 @ q.b3 ...} Но это дает ошибку: "
João Gomes
1

голосов
0

ответ
67

Просмотры

Как передать пользовательские LambdaExpression с помощью C #

У меня есть метод расширения для преобразования класса как DataTable, в этом расширении параметра метода можно определить свойство класса, которые я не хочу быть добавить в DataTable в то время преобразования. Это, как я называю метод расширения. Класс Program {статической силы Main (string [] арг) {CancelMaintenance см = новый CancelMaintenance (); cm.UserID = 1; cm.CancelReasonCodeID = 2; cm.CancelRefund = "C"; cm.Description = "тест"; cm.ReasonCode = "TestCode"; DataTable, дт = cm.ConvertToDataTable2 (х => x.Test1, х => x.Test2); }} Метод расширения, что я называю здесь как этот cm.ConvertToDataTable2 (х => x.Test1, х => x.Test2); Я хочу назвать как этот cm.ConvertToDataTable2 (х => x.Test1, x.Test2); Так как я могу изменить свой внутренний параметр типа метода Выражения принимать свойства, как я ожидал. Метод расширения общественного статический класс MyExt {общественности статической DataTable ConvertToDataTable (этот экземпляр Т, Params Выражение [] proprtiesToSkip), где T: EntityBase {// Пример кода ... DataTable DataTable = новый DataTable (); вернуться DataTable; }} Пример класса общественного класс EntityBase {общественного ИНТ Идентификатор_пользователь {получить; задавать; }} CancelMaintenance общественного класса: EntityBase {общественности Int CancelReasonCodeID {получить; задавать; } Публичная строка ReasonCode {получить; задавать; } Публичная строка Описание {получить; задавать; } Публичная строка CancelRefund {получить; задавать; } Публичная строка Test1 {получить; задавать; } Публичная строка Test2 {получить; задавать; }} Метод расширения общественного статический класс MyExt {общественности статической DataTable ConvertToDataTable (этот экземпляр Т, Params Выражение [] proprtiesToSkip), где T: EntityBase {// Пример кода ... DataTable DataTable = новый DataTable (); вернуться DataTable; }} Пример класса общественного класс EntityBase {общественного ИНТ Идентификатор_пользователь {получить; задавать; }} CancelMaintenance общественного класса: EntityBase {общественности Int CancelReasonCodeID {получить; задавать; } Публичная строка ReasonCode {получить; задавать; } Публичная строка Описание {получить; задавать; } Публичная строка CancelRefund {получить; задавать; } Публичная строка Test1 {получить; задавать; } Публичная строка Test2 {получить; задавать; }} Метод расширения общественного статический класс MyExt {общественности статической DataTable ConvertToDataTable (этот экземпляр Т, Params Выражение [] proprtiesToSkip), где T: EntityBase {// Пример кода ... DataTable DataTable = новый DataTable (); вернуться DataTable; }} Пример класса общественного класс EntityBase {общественного ИНТ Идентификатор_пользователь {получить; задавать; }} CancelMaintenance общественного класса: EntityBase {общественности Int CancelReasonCodeID {получить; задавать; } Публичная строка ReasonCode {получить; задавать; } Публичная строка Описание {получить; задавать; } Публичная строка CancelRefund {получить; задавать; } Публичная строка Test1 {получить; задавать; } Публичная строка Test2 {получить; задавать; }} вернуться DataTable; }} Пример класса общественного класс EntityBase {общественного ИНТ Идентификатор_пользователь {получить; задавать; }} CancelMaintenance общественного класса: EntityBase {общественности Int CancelReasonCodeID {получить; задавать; } Публичная строка ReasonCode {получить; задавать; } Публичная строка Описание {получить; задавать; } Публичная строка CancelRefund {получить; задавать; } Публичная строка Test1 {получить; задавать; } Публичная строка Test2 {получить; задавать; }} вернуться DataTable; }} Пример класса общественного класс EntityBase {общественного ИНТ Идентификатор_пользователь {получить; задавать; }} CancelMaintenance общественного класса: EntityBase {общественности Int CancelReasonCodeID {получить; задавать; } Публичная строка ReasonCode {получить; задавать; } Публичная строка Описание {получить; задавать; } Публичная строка CancelRefund {получить; задавать; } Публичная строка Test1 {получить; задавать; } Публичная строка Test2 {получить; задавать; }}
1

голосов
1

ответ
270

Просмотры

Использование LINQ для заполнения словаря метода асинхронного [дублировать]

Этот вопрос уже есть ответ здесь: Как увлажнять словарь с результатами асинхронных вызовов? 4 ответа Я пытаюсь заполнить словарь. Метод GetData, который возвращает данные в асинхронном поэтому я использую следующий код, чтобы получить словарь: Var = MyDictionary объекты .GroupBy (е => e.EntityId) .Select (е => e.First ()) .ToDictionary (е => е .EntityId, асинхронная сущность => ждет GetData (лица)); К сожалению MyDictionary имеет тип словаря Как заполнить с помощью асинхронной лямбда в ToDictionary?
jabko87
1

голосов
2

ответ
137

Просмотры

Фильтр набора данных в хранилище шаблонов проектирования C #

Я данный ниже запрос, который идеально подходит SELECT MAX (WarehouseId) AS WareHouseId, MAX (CompanyID) AS CompanyID, MAX (ProductID) AS ProductID, SUM (AvailableQuantity) А.С. AvailableQuantity, PurchaseItemPrice ОТ PurchaseItem ГДЕ CompanyID = 1 GROUP BY PurchaseItemPrice ORDER BY MAX (ProductID) ASC Что я должен конвертировать в данный формат ниже вместо LINQ. Я действительно не знаю, что это название дано ниже формата. Пожалуйста, скажите мне, что мы можем назвать этот формат, и если это не хороший подход, чтобы получить данные, пожалуйста, предложить что-то лучше, потому что я новичок в хранилище шаблона проектирования. unitOfWork.PurchaseItemRepository.DataSet .где (х => x.CompanyId == ID) .ToList () .GroupBy (х => x.PurchaseItemPrice) .Select (х => x.Max (у => новый {y.WarehouseId, y.CompanyId, y.ProductId, y.AvailableQuantity})); общественного IRepository PurchaseItemRepository {получить {если (_PurchaseItemRepository == NULL) {dbContext.Configuration.ProxyCreationEnabled = ложь; _PurchaseItemRepository = новый репозиторий (DbContext); } Вернуть _PurchaseItemRepository; }} И ProductItem есть Сущность Кроме того, когда я выполнил выше кода, он будет отображать ошибки приведены ниже. Исключение типа «System.ArgumentException» произошло в mscorlib.dll, но не был обработан в пользовательском коде. Дополнительная информация: По крайней мере, один объект должен реализовывать IComparable. Доступное количество } ) ); общественного IRepository PurchaseItemRepository {получить {если (_PurchaseItemRepository == NULL) {dbContext.Configuration.ProxyCreationEnabled = ложь; _PurchaseItemRepository = новый репозиторий (DbContext); } Вернуть _PurchaseItemRepository; }} И ProductItem есть Сущность Кроме того, когда я выполнил выше кода, он будет отображать ошибки приведены ниже. Исключение типа «System.ArgumentException» произошло в mscorlib.dll, но не был обработан в пользовательском коде. Дополнительная информация: По крайней мере, один объект должен реализовывать IComparable. Доступное количество } ) ); общественного IRepository PurchaseItemRepository {получить {если (_PurchaseItemRepository == NULL) {dbContext.Configuration.ProxyCreationEnabled = ложь; _PurchaseItemRepository = новый репозиторий (DbContext); } Вернуть _PurchaseItemRepository; }} И ProductItem есть Сущность Кроме того, когда я выполнил выше кода, он будет отображать ошибки приведены ниже. Исключение типа «System.ArgumentException» произошло в mscorlib.dll, но не был обработан в пользовательском коде. Дополнительная информация: По крайней мере, один объект должен реализовывать IComparable. _PurchaseItemRepository = новый репозиторий (DbContext); } Вернуть _PurchaseItemRepository; }} И ProductItem есть Сущность Кроме того, когда я выполнил выше кода, он будет отображать ошибки приведены ниже. Исключение типа «System.ArgumentException» произошло в mscorlib.dll, но не был обработан в пользовательском коде. Дополнительная информация: По крайней мере, один объект должен реализовывать IComparable. _PurchaseItemRepository = новый репозиторий (DbContext); } Вернуть _PurchaseItemRepository; }} И ProductItem есть Сущность Кроме того, когда я выполнил выше кода, он будет отображать ошибки приведены ниже. Исключение типа «System.ArgumentException» произошло в mscorlib.dll, но не был обработан в пользовательском коде. Дополнительная информация: По крайней мере, один объект должен реализовывать IComparable.
Ibtisam
1

голосов
1

ответ
79

Просмотры

Render html control while using with lambda expression

I am using NonFactors Grid.Mvc (http://mvc-grid.azurewebsites.net/) and I found limitation in this Grid, if you see an example on http://mvc-grid.azurewebsites.net/Grid/SourceUrl Code in above Example is(bold line contains the limitation that unable to pass lambda expression): @model IEnumerable @(Html .Grid(Model) .Build(columns => { columns.Add(model => model.Name).Titled("Name"); columns.Add(model => model.Surname).Titled("Surname"); columns.Add(model => model.MaritalStatus).Titled("Marital status"); columns.Add(model => model.Age).Titled("Age"); columns.Add(model => model.Birthday).Titled("Birth date").Formatted("{0:d}"); columns.Add(model => model.IsWorking).Titled("Employed"); }) .WithSourceUrl(Url.Action("SourceUrl", "Grid")) .Empty("No data found") .Pageable(pager => { pager.PagesToDisplay = 3; pager.RowsPerPage = 2; }) .Filterable() .Sortable() ) I want replace the .WithSourceUrl(Url.Action("SourceUrl", "Grid")) with .WithSourceUrl(Url.Action("SourceUrl", "Grid", new {m => m.personId})) and I did research to create the method like this public MvcHtmlString WithSourceUrlFor(Expression expression) { var MvcHtmlString = ExpressionHelper.GetExpressionText(expression); return MvcHtmlString; } but I was unable to convert lamda expression into MvcHtmlString and I am stuck. Please help me. Thanks
Waseem Bukhsh
1

голосов
0

ответ
48

Просмотры

Запрос работает на LINQPad, но работает на VS возвращает ошибку NullReference

Мой запрос состоит в следующем: переменная запроса = от А в TableA присоединиться к Ь в TableB на tableA.ID равна tableB.ID присоединиться к с в tableC на tableA.ID равна tableC.ID, где a.ID == «0001» && (из г в внесенному, где d.Flag == "1" && d.Address == c.Address) .Any () выберите новый {a.name, b.Price, c.Address} Когда я удалить условие с .Any () функция, она работает нормально. Почему VS возвращается ошибка, когда LINQPad работает нормально, как это? Запуск также необработанный SQL эквивалент, который EXISTS, если я не ошибаюсь, работает нормально и дает правильные результаты. Цените любую помощь.
Chappi
1

голосов
0

ответ
307

Просмотры

Entity Framework Основные Вложенные транзакции или обновление DbContext среди SaveChanges ()

У меня есть этот API, который удаляет и добавляет различных пользователей в базе данных. Путь этот API написано что-то вроде этого: / * Предполагая, что «пользователи» является массив пользователей для удаления (если пользователи [х] .toDelete == верно), или добавить в противном случае * /, используя (вар дб = новый myContext ()) {используя (вар dbTransaction = db.Database.BeginTransaction ()) {попробуйте {/ * Выполнение удаление пользователей в БД * / SaveChanges (); / * Выполнение добавления пользователей в БД * / Еогеасп (пользователь пользователей), если (user.toDelete!) {Db.users.add (..); db.SaveChanges (); } DbTransaction.Commit (); } Задвижка (ValidationException ех) {dbTransaction.Rollback (); }}} Причина, почему я использую сделки является то, что у меня есть некоторые валидации, которые должны выполняться на новых данных .. Например, я не могу добавить два пользователя с той же электронной почтой! Все проверки на стороне сервера осуществляется с помощью Data-аннотаций и классов метаданным, поэтому я создал атрибут уникальности, которую я связанный к свойству эл.адрес класса UserMetaData. Таким образом, проблема заключается в том, что внутри однозначности атрибута мне нужно еще раз проверить базу данных для поиска других пользователей с той же электронной почтой: класс IsUnique общественности: ValidationAttribute {защищенное переопределение ValidationResult IsValid (значение объекта, ValidationContext validationContext) {... используя (вар дб = новая myContext ()) {/ * Здесь я выполнить выбор на БДЕ ищет запись с той же электронной почтой, все с помощью отражения. * / Если (recordFound> 0) возвращает новый ValidationResult ( "электронная почта уже существует"); вернуться ValidationResult.Success; }}} Итак, как вы можете видеть, внутри проверки я использую новый myContext () и что там проблема: давайте представим, что у меня есть пустую базу данных и добавить два пользователя с той же электронной почты в том же запросе. Как вы можете видеть, я называю db.SaveChanges () после того, как каждый пользователь был добавлен, поэтому я подумал, что, когда второй пользователь будет добавлен бы был проверен, моя проверка знала бы, что первый добавил пользователь и второй один имеет тот же адрес электронной почты, следовательно, проверка исключений была бы бросок и dbTransaction.Rollback () называется. Проблема заключается в том, что внутри валидатора я называю новые myContext () и в этом контексте те изменения, которые я думал, что бы там благодарность db.SaveChanges () там arent't, и это, я думаю, потому что все изменения внутри сделка. Тааак .. Решение я думал, что до сих пор является две: вложенной Сделка: в API У меня есть внешняя трансакция, сохранить состояние БД в начале, то какие-то внутренние транзакции запускаются каждый раз, когда db.SaveChanges () называется , Делая это, проверка действительно видит изменения, но проблема заключается в том, что, если в улове я назвал outerTransaction.rollback (), изменения, внесенные внутренними сделки не rollbacked; Некоторые из способов, чтобы получить контекст, который я использовал в API даже в проверке .. Но там у меня есть только эти два аргумента, так что я, если это не знаю
Jolly
1

голосов
1

ответ
35

Просмотры

Как использовать синтаксис LINQ, чтобы выбрать из моего XDocument всех тех XElements, которые имеют определенное значение атрибута?

Мне нужно создать новый XDocument на основе другого XDocument, и так хочется, чтобы перебрать все XElements оригинального XDocument, добавляя только те XElements, которые проходят определенные критерии к новому XDocument. Проблема заключается в том, что моя переменная «дублирует» всегда нулевой, но он должен всегда содержать как минимум один элемент, который является текущим в данный момент. XDocument док = новый XDocument (); XElement RootElement = новый XElement ( "пользователи"); .. Вар allElements = originalDoc.Element ( "пользователи") элементы () Где (е => e.Name.LocalName == "пользователь"); Еогеасп (вар xUser в allElements) {вар дубликаты = originalDoc.Element ( "пользователи") элементы () Где (е => e.Attribute ( "Войти") Значение == "Demo1".).. rootElement.Add (xUser); } Doc.Add (RootElement); вернуть документ; Где originalDoc является XDocument, что синтаксис LINQ, чтобы выбрать из моей XDocument в тот момент все те XElements, которые имеют определенное значение атрибута? Приложение: Вот то, что XML выглядит, не пространства имен или какие-либо дополнительные услуги, только корневой элемент и одного уровня подэлементов:
Edward Tanguay
1

голосов
1

ответ
264

Просмотры

DocumentDB Linq query by object property in list

Я пытаюсь следовать решению, представленное здесь, но до сих пор никакого успеха: Этот запрос возвращает нуль: план вара = _dbClient.CreateDocumentQuery (_collectionUri) .SelectMany (р => p.Users.Where (и => u.Id == идентификатор пользователя) .Select (и => р)) .AsEnumerable () .FirstOrDefault (); Хотя это возвращает документ Я ищу (я стараюсь не оставлять AsEnumerable перед Где: план вара = _dbClient.CreateDocumentQuery (_collectionUri) .AsEnumerable () .гд (р => p.Users.Any (и => u.Id == идентификатор пользователя)) .FirstOrDefault (); Это, как документ выглядит следующим образом: { "ID": "9710ef23-aae5-4215-a45b-641185140722", "название": "Free Plan", " planId ": "freeplan", "рейтинг": 1,"
luizs81
1

голосов
1

ответ
65

Просмотры

Linq группы запросов по весу

AllWordIDsAndWeightings является словарем уникальных идентификаторов для слов, которые появляются в поисковом запросе, наряду с их соответствующим взвешиванием. Учитывая следующий запрос:. ReturnedObjectIDs = новый список (db.WordObjectMaps .где (с => c.ForObjectTypeID == TopicObjectTypeID && AllWordIDsAndWeightings.Select (ш => w.Key) .ToList () Содержит (c.WordID)). GroupBy (с => c.ForObjectID) .Select (с => c.Key)); Я хотел бы изменить его так, чтобы: Группа по утверждению содержит сумму частоты слов * слово взвешивания для каждого слова. Тогда я могу заказать по этой стоимости нисходящих и берет первые п записей. Это возможно?
Tom Gullen
1

голосов
2

ответ
60

Просмотры

LinqToExcel to load Dictionary

I have the following worked out but quite less than elegant. I'd like to work this out with ToDictionary if possible. Thank you for any help as I'm pretty new. var excel = new ExcelQueryFactory(@"E:\MAHipotCepaStationProgram.xlsx"); //get list of program names List testNames = new List(); testNames.AddRange(excel.Worksheet().ToList() .Where(s => s["Program #"].Value.ToString() == "Program Title") .Select(s => s[1].Value.ToString())); //get list of program numbers List testNumbers = new List(); testNumbers.AddRange(excel.Worksheet().ToList() .Where(s => s["Program #"].Value.ToString() == "Program #") .Select(s => Convert.ToInt32(s[1].Value))); //combine them Dictionary programs = new Dictionary(); for (int x = 0; x < testNames.Count-1; x++) { if (!programs.ContainsKey(Convert.ToInt32(testNumbers[x]))) { programs.Add(Convert.ToInt32(testNumbers[x]), testNames[x]); } else { testNumbers[x].Dump("Duplicate Found"); } } programs.Dump("Dict"); This is as close as I've gotten, but not right. Error: "Requires a receiver of type IEnumberable string which isn't computing with me: var excel = new ExcelQueryFactory(@"E:\MAHipotCepaStationProgram.xlsx"); Dictionary programsDict = excel.Worksheet().ToDictionary( e => e["Program #"].Value.ToString() == "Program Title") .Select(s => s[1].Value.ToString()), f => f.Where(d => d.Value.ToString() == "Program #").ToString());
1

голосов
0

ответ
36

Просмотры

Expressions with dynamic return types (dynamic keyword)

Моя конечная цель здесь, чтобы сделать общую версию IQueryable.OrderBy (), который принимает строковый параметр и необязательное направление сортировки. Что-то вроде этих: возвращение myList.OrderBy ( "property1"); вернуться myList.Orderby ( "property1", SortOrder.Descending); (. Прецедент будет сайт, переходящая в поле списка будет сортировать по) С этой целью, я пытался придумать способ создания следующего выражения: OBJ => obj.PropertyName файлик несколько мест в StackOverflow, которые могли бы помочь мне, и они получили меня довольно близко (это один, в частности). Butt это не совсем поймите меня всю дорогу. В частности, я постоянно получаю страшное выражение типа «System.Int64» не может быть использован для типа возвращаемого значения «System.Object» для типов значений. Я думал, что я мог бы уйти с возвращением динамическим здесь, но это, кажется, упали более. Я мог бы сделать Преобразовать, но, похоже, это не должно быть необходимым. Мой код для генерации селектор свойств заключается в следующем: открытое статическое Выражении GeneratePropertySelector (строка PropertyName) {вар ObjectType = TypeOf (Т); вар свойство = objectType.GetProperty (PropertyName); ParameterExpression Arg = Expression.Parameter (ObjectType, "OBJ"); MemberExpression propertyExpression = Expression.Property (Arg, PropertyName); // Вот строка, которая умирает уаг selectorExpression = Expression.Lambda (propertyExpression, новый ParameterExpression [] {} Arg); вернуться selectorExpression; } И тогда использование внутри реализации методы расширения будет: вар упорядоченного = myList.OrderBy (GeneratePropertySelector (»
Ari Roth
1

голосов
1

ответ
207

Просмотры

Как сделать список из нескольких строк из внутреннего соединения в Entity Framework Ядра?

У меня есть вид модели под названием Pictures, как общественный класс PicturesViewModel {общественного String Name; Публичный список FileNames; } И у меня есть 2 таблицы в базе данных сервера SQL, имена и именах, где idname в FileNames является внешним ключом к идентификатору в именах. Этот скриншот показывает 2 таблицы я использую Entity Framework Ядро в проекте ASP.NET MVC ядра. Я должен использовать базу данных первого метод, и я хочу, чтобы заполнить класс PicturesViewModel в моем контроллере и отправить его к просмотру. Проблема заключается в том, что я не могу найти способ, чтобы создать объект PicturesViewModel из DbContext с LINQ и Entity Framework. Единственный способ, которым я могу рассмотреть, чтобы сделать это с помощью C # (для или Еогеасп) и сделать это с 2 этапа: первый заполнения Имя затем заполнить FileNames с для / Еогеасп цикла Есть еще один способ в Linq или Entity Framework, чтобы создать список из внутреннее соединение в DbContext?
H. Harati
1

голосов
0

ответ
121

Просмотры

Как получить иерархические данные в Entity Framework или в SQL Server

У меня следующие таблицы, TblFaq (запись представляет собой диаграмму), ПК: FAQId, FK: FAQWebPageId TblFaqNode (имеет все узлы для всех диаграмм), ПК: NodeId, FK: FAQId TblFaqNodeMapping (содержит информацию о том, какой узел подключен к какой узел), ПК: FAQNodeMapId, FK: SourceNodeId [родитель], DestNodeId [ребенок] мне нужно, чтобы сформировать C # объект, как показано в JSON ниже, либо с помощью Entity Framework LINQ к SQL запроса (базы данных Первый подход), либо в письменной форме хранимая процедура для возврата JSON / XML. Я не ищу для результирующего набора, который говорит, какой узел подключается к которому один раз, потому что я имею в цикле все записи рекурсивно для создания C # объект, который не является эффективным и как сейчас я только в состоянии сделать это, как показано ниже запроса. ВЫБРАТЬ FAQ.FAQWebPageId, FAQ.FAQId, FAQ.Name, FAQNode.NodeId, FAQNode. [Данных], FAQNode.FAQNodeTypeId, FAQNode.FAQNodeBranchTypeId, FAQNode.IsStartNode, FAQNode.IsEndNode, FAQNodeMap.FAQNodeMapId, FAQNodeMap.SourceNodeId, FAQNodeMap.DestNodeId, FAQNodeMap.Label ОТ TBL_LY_FAQ КАК FAQ РЕГИСТРИРУЙТЕСЬ TBL_LY_FAQNode КАК FAQNode ПО FAQ.FAQId = FAQNode.FAQId LEFT JOIN TBL_LY_FAQNodeMap кАК FAQNodeMap пО FAQNode.NodeId = FAQNodeMap.DestNodeId ГДЕ FAQ.FAQWebPageId = 1 ORDER BY FAQNode.NodeId Кроме того, узлы в TblFaqNode, которые имеют IsStartNode как 1 всегда должен быть верхние узлы в результате т.е. узлы, не имеющие какой-либо родитель и весь набор результатов будет фильтроваться по условию где для FAQWebPageId. Непосредственно через запрос к базе данных Я хочу, чтобы получить C # объекта в иерархическом формате, как показано ниже JSON, пожалуйста, подсказывает, как я могу добиться этого. Заранее спасибо. [{ "

Просмотр дополнительных вопросов