Вы должны создать один класс контекста.
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();
Теперь вы можете передать параметр любому контроллеру из всего приложения.
Это может быть чище ( вам не нужны все в
утверждения):
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
}
Не имейте доступа к 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 }
Я выяснил, как использовать несколько левых внешних объединений в 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
Я думаю, что необходимо быть в состоянии следовать методу, используемому в этот сообщение. Это выглядит действительно ужасным, но я думал бы, что Вы могли сделать это дважды и получить результат, который Вы хотите.
интересно, является ли это на самом деле случаем, где Вы были бы более обеспеченным использованием DataContext.ExecuteCommand(...)
вместо того, чтобы преобразовать в linq.