Linq к Sql: Несколько левых внешних объединений

Вы должны создать один класс контекста.

public class Context {
    private final static Context instance = new Context();
    public static Context getInstance() {
        return instance;
    }

    private Connection con;
    public void setConnection(Connection con)
    {
        this.con=con;
    }
    public Connection getConnection() {
        return con;
    }

    private TabRoughController tabRough;
    public void setTabRough(TabRoughController tabRough) {
        this.tabRough=tabRough;
    }

    public TabRoughController getTabRough() {
        return tabRough;
    }
}

Вам нужно просто установить экземпляр контроллера при инициализации с помощью

Context.getInstance().setTabRough(this);

, и вы можете использовать его из всего приложение только с помощью

TabRoughController cont=Context.getInstance().getTabRough();

Теперь вы можете передать параметр любому контроллеру из всего приложения.

158
задан mwigdahl 27 March 2009 в 12:50
поделиться

4 ответа

Это может быть чище ( вам не нужны все в утверждения):

var query = 
    from order in dc.Orders
    from vendor 
    in dc.Vendors
        .Where(v => v.Id == order.VendorId)
        .DefaultIfEmpty()
    from status 
    in dc.Status
        .Where(s => s.Id == order.StatusId)
        .DefaultIfEmpty()
    select new { Order = order, Vendor = vendor, Status = status } 
    //Vendor and Status properties will be null if the left join is null

Вот еще один левый пример соединения

var results = 
    from expense in expenseDataContext.ExpenseDtos
    where expense.Id == expenseId //some expense id that was passed in
    from category 
    // left join on categories table if exists
    in expenseDataContext.CategoryDtos
                         .Where(c => c.Id == expense.CategoryId)
                         .DefaultIfEmpty() 
    // left join on expense type table if exists
    from expenseType 
    in expenseDataContext.ExpenseTypeDtos
                         .Where(e => e.Id == expense.ExpenseTypeId)
                         .DefaultIfEmpty()
    // left join on currency table if exists
    from currency 
    in expenseDataContext.CurrencyDtos
                         .Where(c => c.CurrencyID == expense.FKCurrencyID)
                         .DefaultIfEmpty() 
    select new 
    { 
        Expense = expense,
        // category will be null if join doesn't exist
        Category = category,
        // expensetype will be null if join doesn't exist
        ExpenseType = expenseType,
        // currency will be null if join doesn't exist
        Currency = currency  
    }
245
ответ дан 23 November 2019 в 21:36
поделиться

Не имейте доступа к VisualStudio (я нахожусь на своем Mac), но использование информации от http://bhaidar.net/cs/archive/2007/08/01/left-outer-join-in-linq-to-sql.aspx , похоже, что можно быть в состоянии сделать что-то вроде этого:

var query = from o in dc.Orders
            join v in dc.Vendors on o.VendorId equals v.Id into ov
            from x in ov.DefaultIfEmpty()
            join s in dc.Status on o.StatusId equals s.Id into os
            from y in os.DefaultIfEmpty()
            select new { o.OrderNumber, x.VendorName, y.StatusName }
49
ответ дан tvanfosson 4 November 2019 в 17:26
поделиться

Я выяснил, как использовать несколько левых внешних объединений в VB.NET с помощью LINQ для SQL:

Dim db As New ContractDataContext()

Dim query = From o In db.Orders _
            Group Join v In db.Vendors _
            On v.VendorNumber Equals o.VendorNumber _
            Into ov = Group _
            From x In ov.DefaultIfEmpty() _
            Group Join s In db.Status _
            On s.Id Equals o.StatusId Into os = Group _
            From y In os.DefaultIfEmpty() _
            Where o.OrderNumber >= 100000 And o.OrderNumber <= 200000 _
            Select Vendor_Name = x.Name, _
                   Order_Number = o.OrderNumber, _
                   Status_Name = y.StatusName
22
ответ дан Rowland Shaw 4 November 2019 в 17:26
поделиться

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

интересно, является ли это на самом деле случаем, где Вы были бы более обеспеченным использованием DataContext.ExecuteCommand(...) вместо того, чтобы преобразовать в linq.

3
ответ дан Jon Norton 4 November 2019 в 17:26
поделиться
Другие вопросы по тегам:

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