Можете ли вы иметь класс в структуре?

вы должны использовать другое соединение, что-то в этом направлении:

SELECT toD.dom_url AS ToURL, 
    fromD.dom_url AS FromUrl, 
    rvw.*

FROM reviews AS rvw

LEFT JOIN domain AS toD 
    ON toD.Dom_ID = rvw.rev_dom_for

LEFT JOIN domain AS fromD 
    ON fromD.Dom_ID = rvw.rev_dom_from

EDIT :

Все, что вы делаете, это соединение в таблицу несколько раз. Посмотрите на запрос в сообщении: он выбирает значения из таблиц отзывов (aliased as rvw), эта таблица предоставляет вам 2 ссылки на таблицу домена (FOR и FROM).

На этом этапе просто оставить слева таблицу Домен в таблице отзывов. Один раз (с псевдонимом D) для FOR и второй раз (с псевдонимом fromD) для FROM.

Затем в списке SELECT вы выберете поля DOM_URL из обоих LEFT JOINS таблицы DOMAIN , ссылаясь на них псевдонимом таблицы для каждого, связанного с ссылкой на таблицу Domains, и псевдоним их как ToURL и FromUrl.

. Для получения дополнительной информации об aliasing в SQL читайте здесь здесь .

24
задан Luke Girvin 6 September 2013 в 16:22
поделиться

2 ответа

Да, Вы можете. Указатель на членскую переменную класса хранится <ударяют> на стеке с остальной частью значений структуры, и данные экземпляра класса хранятся на "куче".

Структуры могут также содержать определения классов как участников (внутренние классы).

Вот некоторый действительно бесполезный код, который, по крайней мере, компилирует и работает, чтобы показать, что это возможно:

using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            MyStr m = new MyStr();
            m.Foo();

            MyStr.MyStrInner mi = new MyStr.MyStrInner();
            mi.Bar();

            Console.ReadLine();
        }
    }

    public class Myclass
    {
        public int a;
    }

    struct MyStr
    {
        Myclass mc;

        public void Foo()
        {
            mc = new Myclass();
            mc.a = 1;
        }

        public class MyStrInner
        {
            string x = "abc";

            public string Bar()
            {
                return x;
            }
        }
    }
}
23
ответ дан Ben Voigt 6 September 2013 в 16:22
поделиться

Это - вероятно, не методические рекомендации, чтобы сделать так: см. , http://msdn.microsoft.com/en-us/library/ms229017 (По сравнению с 85) ссылочными типами .aspx

выделяется на "куче", и управление памятью обрабатывается сборщиком "мусора".

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

В целом, типы значения являются более дешевыми, чтобы выделить и освободить. Однако, если они используются в сценариях, которые требуют существенного количества упаковки и распаковывания, они работают плохо по сравнению со ссылочными типами.

2
ответ дан zak 6 September 2013 в 16:22
поделиться
Другие вопросы по тегам:

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