?: Оператор в запросе LINQ

x, y, w, h = cv2.boundingRect(contours[idx]) - это нужные вам координаты, затем запишите их в текстовый файл:

...
with open("coords.txt","w+") as file:
    for idx in range(len(contours)):
        x, y, w, h = cv2.boundingRect(contours[idx])
        mask[y:y+h, x:x+w] = 0
        file.write("Box {0}: ({1},{2}), ({3},{4}), ({5},{6}), ({7},{8})".format(idx,x,y,x+w,y,x+w,y+h,x,y+h))
        cv2.drawContours(mask, contours, idx, (255, 255, 255), -1)
        r = float(cv2.countNonZero(mask[y:y+h, x:x+w])) / (w * h)
...

Результат будет содержать 4 точки для каждой ячейки, как здесь.

Box 0: (360,259), (364,259), (364,261), (360,261)
Box 1: (380,258), (385,258), (385,262), (380,262)
Box 2: (365,258), (370,258), (370,262), (365,262)
Box 3: (386,256), (393,256), (393,260), (386,260)
Box 4: (358,256), (361,256), (361,258), (358,258)
10
задан GEOCHET 14 October 2012 в 23:31
поделиться

5 ответов

При создании анонимного типа (что Вы делаете с "новым", не указывая тип) необходимо указать имя элемента для каждого свойства. От Вашего примера это выглядело бы примерно так: (также зафиксированный Ваши соединения)

var query = from a in db.tblActivities
            join i in db.tblIPs on a.ipid equals i.id
            join u in db.tblUsers on i.uid equals u.id
            select new {
               UserName = (u.UserName ?? i.Address),
               Request = a.Request,
               Date = a.DateTime
            };

Вы могли, вероятно, сделать UserName Ваш путь, также:

UserName = (u.UserName == null) ? i.Address : u.UserName,

но?? оператор более краток. Это подобно "isnull" в SQL.

19
ответ дан 3 December 2019 в 19:36
поделиться

В самом деле. этот вопрос зависит от конкретной реализации IQueryable, который возвратит Ваше linq выражение. Я вижу, что у Вас есть дб. XXX так Вы использующий linq к sql или некоторому linq к хранилищу данных? Если так, определенная реализация IQueryable должна будет иметь способ перевести Ваше выражение в выражение хранилища. Кроме вышеупомянутых комментариев, некоторые из других комментариев корректны, что в анонимном типе необходимо указать имя каждого участника. Это - действительно Ваша ошибка.

0
ответ дан 3 December 2019 в 19:36
поделиться

Необходимо использовать ключевое слово соединения и определить отношения между объектами для создания надлежащего внутреннего объединения.

Здесь можно найти некоторые примеры об этом, я также настоятельно рекомендую Вам для получения LinqPad, это - действительно ценный инструмент для тестирования запросов, также его очень хорошее для изучения, это имеет 200 + примеры.

1
ответ дан 3 December 2019 в 19:36
поделиться

если Вы проверяете только на пустой указатель, можно ли также использовать??

string something = null;
string somethingElse = something ?? "default value";

Что касается примеров выше, это корректно, чтобы сделать тех, которые идут...

string something = (somethingElse == null ? "If it is true" : "if it is false");

parens не требуются, но они действительно помогают в чтении.

0
ответ дан 3 December 2019 в 19:36
поделиться

Я довольно плохо знаком с Linq к SQL, но я вполне уверен, он пошел бы как это:

var query =
    from a in db.tblActivities
    from i in a.tblIPs
    from u in i.tblUsers 
    select new
    {
        userName = (u.UserName == null)
            ? i.Address
            : u.UserName,
        a.Request,
        a.DateTime
    };

Если оператор должен быть в круглых скобках и результатах за пределами них. Что касается соединений, Вы следуете за цепочкой по сравнению с одной-> многие.

0
ответ дан 3 December 2019 в 19:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: