#vb.net #linq
#vb.net #linq
Вопрос:
Я использую запрос Linq к DataTable в VB и хочу возвращать только уникальные имена форм и идентификаторы GUID из списка из 5 элементов:
Я добавил .Distinct к своему запросу, однако он по-прежнему возвращает повторяющиеся результаты, как показано на изображении.
Dim qry = (
From d In Data
Where d("FormGUID").ToString IsNot ""
Select New With {
.FormName = d("Form").ToString, #
.FormGUID = d("FormGUID").ToString}
).Distinct
Как мне выбрать только 2 отдельные строки?
Комментарии:
1.
.Take(2)
возможно, поможет посмотреть здесь . Удалить.Distict
, а затем поместитьqry.Distinct.Take(2)
также может помочь.
Ответ №1:
Из анонимных типов (Visual Basic) — Равенство
Равенство
Экземпляры анонимных типов могут быть равны, только если они являются экземплярами одного и того же анонимного типа. Компилятор обрабатывает два экземпляра как экземпляры одного и того же типа, если они удовлетворяют следующим условиям:
- Они объявлены в одной сборке.
Их свойства имеют одинаковые имена, одинаковые предполагаемые типы и объявляются в том же порядке. Сравнение имен не чувствительно к регистру.
Одни и те же свойства в каждом из них помечены как ключевые свойства.
По крайней мере, одно свойство в каждом объявлении является ключевым свойством.
Экземпляр анонимного типа, который не имеет ключевых свойств, равен только самому себе.
Итак, чтобы обеспечить надлежащую проверку на равенство, сделайте поля вашего анонимного типа Key
ied.
Dim qry = (
From d In Data
Where d("FormGUID").ToString IsNot ""
Select New With {
Key .FormName = d("Form").ToString,
Key .FormGUID = d("FormGUID").ToString}
).Distinct