Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Резюме для программиста

alex445 коренной житель30.11.22 09:02
NEW 30.11.22 09:02 
в ответ alex445 30.11.22 08:59, Последний раз изменено 30.11.22 09:02 (alex445)

И вообще, вот в рефлексии всё на строках - никакой типовой защиты. Хочешь имя свойства или его значение через ревлексию? - Пиши имя строкой. Лишь после появления нормального nameof стало возможно избегать строк. Но это буквально пару лет назад стало доступно, а до этого все динамичили по-чёрному как жалкие скриптизёры. Какие предъявы к DLINQ тогда?

Срыв покровов патриот30.11.22 13:56
NEW 30.11.22 13:56 
в ответ alex445 30.11.22 08:55

а через new {c.City, c. CompanyName} не работает?

Срыв покровов патриот30.11.22 13:58
NEW 30.11.22 13:58 
в ответ alex445 30.11.22 09:02

nameOf это вообще-то упрощённый typeOf.Name


Ну и я рефлексию в крайних случаях использую


alex445 коренной житель30.11.22 14:21
NEW 30.11.22 14:21 
в ответ Срыв покровов 30.11.22 13:56

Вы имеете ввиду анонимный тип? У них вроде область видимости ограничиена текущим блоком кода?

alex445 коренной житель30.11.22 14:22
NEW 30.11.22 14:22 
в ответ Срыв покровов 30.11.22 13:58
nameOf это вообще-то упрощённый typeOf.Name

Может наоброт - продвинутый? В последних версиях языка он прям ваще моща.

Срыв покровов патриот30.11.22 19:12
NEW 30.11.22 19:12 
в ответ alex445 30.11.22 14:21

я имею в виду orderBy(x => new {c.City, c. CompanyName})


Срыв покровов патриот30.11.22 19:19
NEW 30.11.22 19:19 
в ответ alex445 30.11.22 14:22
Может наоброт - продвинутый?

в примерах по ссылке наверное продвинутый

А для имени свойства это просто сокращённая форма typeOf().Name.

alex445 коренной житель30.11.22 22:20
NEW 30.11.22 22:20 
в ответ Срыв покровов 30.11.22 19:12
я имею в виду orderBy(x => new {c.City, c. CompanyName})

а что это?

Срыв покровов патриот30.11.22 23:45
NEW 30.11.22 23:45 
в ответ alex445 30.11.22 22:20

камон, сортировка по двум столбцами

alex445 коренной житель01.12.22 01:03
NEW 01.12.22 01:03 
в ответ Срыв покровов 30.11.22 23:45, Последний раз изменено 01.12.22 01:03 (alex445)

Нигде такого примера не встречал. И не может он отсортировать - пишет, что ни один объект нельзя сравнить. Это анонимный тип, у них нету компаратора. И вообще они не могут интерфейсы реализовывать. Это чисто для данных объекты.

Срыв покровов патриот01.12.22 14:57
NEW 01.12.22 14:57 
в ответ alex445 01.12.22 01:03

все работает, только что проверил в EF 6.

alex445 коренной житель01.12.22 15:19
NEW 01.12.22 15:19 
в ответ Срыв покровов 01.12.22 14:57, Последний раз изменено 01.12.22 15:21 (alex445)

Я проверял не на доступе к БД, а просто на коллекции, созданной тут же в коде:


class Program
{
    static void Main(string[] args)
    {
        List<A> list = new List<A>()
        {
            new A() {B=1, C=9},
            new A() {B=2, C=8},
            new A() {B=3, C=7},
        };


        list
            .AsQueryable() // even without this you get the same exception
            .OrderBy(o => new { o.B, o.C })
            .ToList()
            .ForEach(o => Console.WriteLine($"{o.B} {o.C}"));
    }


    public class A
    {
        public int B { get; set; }
        public int C { get; set; }
    }
}


Вот такое исключение


System.InvalidOperationException

HResult=0x80131509

Message=Failed to compare two elements in the array.

Source=System.Private.CoreLib

StackTrace:

at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource, Exception e)

at System.Collections.Generic.ArraySortHelper`1.Sort(Span`1 keys, Comparison`1 comparer)

at System.MemoryExtensions.Sort[T](Span`1 span, Comparison`1 comparison)

at System.Linq.EnumerableSorter`2.QuickSort(Int32[] keys, Int32 lo, Int32 hi)

at System.Linq.EnumerableSorter`1.Sort(TElement[] elements, Int32 count)

at System.Linq.OrderedEnumerable`1.d__17.MoveNext()

at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)

at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)

at ConsoleApp1.Program.Main(String[] args) in C:\Users\alexsmith\OneDrive\Desktop\ConsoleApp1\ConsoleApp1\Program.cs:line 21

This exception was originally thrown at this call stack:

[External Code]

Inner Exception 1:

ArgumentException: At least one object must implement IComparable.


Дотнет 5.


Может, у вас какая-то расширяющая либа подключена? Подобную запись видел только в том же DLINQ, но там через строку выражение сортировка задаётся.

alex445 коренной житель01.12.22 15:31
NEW 01.12.22 15:31 
в ответ alex445 01.12.22 15:19, Последний раз изменено 01.12.22 15:31 (alex445)

Кстати, никого не бесит, что ты не можешь просто фигачить код десятипальцевым методом, не смотря на клавиатуру? Набрал имя переменной - проверил тип. Вдруг надо на налл проверить ещё. Затем поставил точку, обратился к члену класса - проверил тип. Вдруг опять налл или надо приведение типов сделать. И так каждый раз - пять символов написал, остановился, подумал, снова 5 символов. А где вот это вот на расслабоне?

alex445 коренной житель01.12.22 15:36
NEW 01.12.22 15:36 
в ответ alex445 01.12.22 15:19, Последний раз изменено 01.12.22 15:37 (alex445)

Срыв покровов

А в чём разница? Может, у вас что-то не то написано?


x => new {c.City, c. CompanyName}

o => new { o.B, o.C }

Срыв покровов патриот01.12.22 16:10
01.12.22 16:10 
в ответ alex445 01.12.22 15:19

я в Linq to entities пробовал

На локальных коллекциях и правда не работает.


alex445 коренной житель01.12.22 19:39
NEW 01.12.22 19:39 
в ответ Срыв покровов 01.12.22 16:10, Последний раз изменено 01.12.22 19:44 (alex445)

LINQtE это же IQueryable. Я привёл коллекцию к этому типу - всё равно не сработало. Такого сортирующего метода и в стандартных расширениях IQueryable вроде нет. Говорю же, наверное у вас сторонняя расширяющая библиотека подключена.

alex445 коренной житель01.12.22 19:50
NEW 01.12.22 19:50 
в ответ alex445 01.12.22 19:39

Такая штука доступна лишь для выражений, которые затем транспормируются в цепочку вызовов ThenBy

https://learn.microsoft.com/en-us/dotnet/csharp/language-r...

Срыв покровов патриот01.12.22 19:51
NEW 01.12.22 19:51 
в ответ alex445 01.12.22 19:39

ничего не подключено.

alex445 коренной житель01.12.22 19:52
NEW 01.12.22 19:52 
в ответ Срыв покровов 01.12.22 19:51, Последний раз изменено 01.12.22 19:55 (alex445)

Нигде подобных примеров не видел. И у меня не работает. Это и на объявление компаратора по месту не похоже.

Срыв покровов патриот01.12.22 21:15
NEW 01.12.22 21:15 
в ответ alex445 01.12.22 19:52

в Entity framework тоже не работает?