string1> = string2 не реализованный в Linq к SQL, какому-либо обходному решению?

Документация для json_object_new_object гласит

Помните, что при использовании json_object_object_add или json_object_array_put_idx право собственности переходит к объекту / массиву.

blockquote>

и

Любые владения, которые вы приобрели, но не передали, должны быть переданы через json_object_put.

blockquote>

Для меня это означает, что все должно быть в порядке:

json_object *jobj1 = json_object_new_object();
json_object *jobj2 = json_object_new_object();

json_object_object_add(jobj1, "Object", jobj2);

// ...

json_object_put(jobj1); // This is the only one we have ownership of now

И да, как сказано в документации, вы должны освободить все свои права владения, используя json_object_put ,

Что касается json_tokener_parse , в документации явно ничего не говорится о владении или освобождении, но я был бы очень удивлен, если бы он был другим json_object_new_object в этом отношении , Это не имело бы никакого смысла, если бы вам не разрешили использовать объекты, возвращенные из json_tokener_parse, так же, как вы можете использовать объекты, построенные через json_object_new_object.

Например, должно быть возможно сделать это:

json_object *jobj1 = json_object_new_object();  // "Manual" object
json_object *jobj2 = json_tokener_parse(...);   // Parsed object

// At this point, jobj1->_ref_count and jobj2->_ref_count will both be 1.

// We could now add the parsed object as a new field in our "manual" one:
json_object_object_add(jobj1, "ParsedObject", jobj2); 

// ...

// In the end, we only have to release the "manual" object.
json_object_put(jobj1);

Также, да, как показывает ваш журнал valgrind, функция json_tokener_parse вызывает json_object_new_object за кулисами, поэтому вам нужно вызовите json_object_put для возвращенного объекта (т.е., если вы не включите его в другой объект или массив, как упоминалось ранее).

Парню, который написал код в упомянутом посте в блоге , похоже, не небезразлична утечка памяти в его программе, возможно, потому, что эта программа настолько проста и заканчивается сразу после обработки только одного объекта.

9
задан Jedi Master Spooky 16 February 2009 в 14:24
поделиться

4 ответа

string1> = string2 не поддерживается в C# Linq К Sql. Строковый класс не переопределяет> = оператор вообще. Это только переопределяет! = и == операторы. Можно проверить это путем попытки скомпилировать следующий метод

public static void Example() {
  int val = "foo" >= "bar";
}

Если Вы хотите выдержать сравнение со Строками в LinqToSql, необходимо смочь использовать статическую Строку. Сравните (строка, строка) метод.

8
ответ дан 4 December 2019 в 07:15
поделиться

Если Вы ищете => который обычно писался бы как >= затем Вы не можете сделать этого непосредственно со строками. Можно получить то же поведение через CompareTo:

string1.CompareTo(string2) >= 0

В этом случае, причем результат меньше чем или равен для обнуления средств это string1 был бы отсортирован прежде string2 и поэтому больше.

К вашему сведению => оператор в C# используется только в определении лямбда-выражений.

24
ответ дан 4 December 2019 в 07:15
поделиться

Я не совсем уверен, что =>, чем или о каком языке Вы говорите, но я могу только предположить, что Вы обращаетесь к> = (больше, чем или равные). Вы не можете использовать большее, чем или равняться оператору со строками, потому что нет категорического способа сказать то, о чем Вы говорите. Если они - на самом деле числа, можно хотеть сделать.

var query = from c in dc.Customers
            where c.CustomerID >= Int32.Parse("32")
            select c;
0
ответ дан 4 December 2019 в 07:15
поделиться

Я не абсолютно уверен, что Вы пытаетесь сделать здесь, но строки непосредственно переводят в Linq к SQL-запросам.

Вы могли дать пример того, чего Вы делаете попытку?

Вот основное использование в качестве примера:

string string2 = "test";

using (MyDataContext dc = new MyDataContext())
{
   // without lambdas
   var query1 = from item in dc.Items
               where item.Value == string2
               select item;

   // with lambdas
   var query2 = dc.Items.Where(item=>item.string1 == string2);
}
-1
ответ дан 4 December 2019 в 07:15
поделиться
Другие вопросы по тегам:

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