2014-11-06 81 views
1
select ind.desc,ind.number 
from int_goals_df idd, goals_df ind 
where idd.dld_number = 123456 
and ind.number = idd.ind_number 
and ind.categorie = 2 
order by follownumber 

我很難將它轉換爲LINQ,因爲它使用兩個表。 我目前正與foreach循環解決了這個現在勢在必行,但不滿意的話..將sql轉換爲LINQ與兩個表

我試圖讓與的int_goals_df列表匹配的goals_df列表。

任何提示將不勝感激!謝謝 !

編輯 - 這裏是我使用的代碼:

//get current GoalDefinitions by selected Goal 
var currentGoalDefinition = MyAppAppContext.MyAppAppContextInstance.MyAppContext.GoalDefinitions.FirstOrDefault(
    d => d.DLD_GoalDFID == interv.Goal.DLD_GoalenDFID); 

// get current intervGoalDefinitions by GoalDefinition 
var currentintervGoalDefinitions = MyAppAppContext.MyAppAppContextInstance.MyAppContext.intervGoalDefinitions.Where(
    idd => idd.DLD_GoalDFID == currentGoalDefinition.DLD_GoalDFID).OrderBy(idd => idd.IDD_VolgNummer); 

intervDefinitionCollection = new ObservableCollection<intervDefinition>(MyAppAppContext.MyAppAppContextInstance.MyAppContext.intervDefinitions.Where(i => i.IND_Categorie == intCategorie)); 

// filter intervGoalDefinitions by intervDefinitions 
var intervDefinitionCollectionTemp = new ObservableCollection<intervDefinition>(); 
foreach (var currentintervGoalDefinity in currentintervGoalDefinitions) 
{ 

    var foundintervGoalDefinitySorted = intervDefinitionCollection.FirstOrDefault(
     i => i.IND_intervDFID == currentintervGoalDefinity.IND_intervDFID); 

    if (foundintervGoalDefinitySorted != null) 
    intervDefinitionCollectionTemp.Add(foundintervGoalDefinitySorted); 
} 

intervDefinitionCollection = intervDefinitionCollectionTemp; 
+1

那麼,你目前的解決方案是什麼,你不開心?請顯示一些代碼 – HimBromBeere 2014-11-06 12:51:05

+0

需要了解您的對象的細節。你有什麼代表這個記錄? – 2014-11-06 12:51:53

回答

1

假設NHibernate的ORM作爲和int_goal是這一目標的一個子類

var results = from idd in session.Query<IntGoals>() 
       where idd.DlDNumber = 123456 && idd.Category.Id == 2 
       orderby idd.FollowNumber 
       select new { idd.Description, idd.Number }; 
1
context.int_goals_df.Join(context.goals_df, x => x.ind_number, x => x.number, 
    (x, y) => new 
    { 
     idd = x, 
     ind = y 
    }) 
    .Where(x => x.idd.dld_number = 123456 && x.ind.categorie = 2) 
    .OrderBy(x => x.idd.follownumber) 
    .Select(x => new 
    { 
     x.ind.desc, 
     x.ind.number 
    }); 
0

快速去 - 想你需要加入

var results = from idd in session.Query<int_goals_df>() 
      join ind in session.Query<goals_df>() 
      on idd.ind_number equals ind.ind_number 
      where idd.DlDNumber = 123456 && idd.Category.Id == 2 
      orderby idd.FollowNumber 
      select new { idd.Description, idd.Number }; 
0

我傾向於使用SQL語法,而不隱加入

/*Fields*/ 
    SELECT ind.desc, ind.number 
/*Tables*/ 
    FROM int_goals_df idd 
    INNER JOIN goals_df ind 
    ON ind.number = idd.ind_number 
/*Conditions*/ 
    WHERE idd.dld_number = 123456 
    AND ind.categorie = 2 
/*Order/Grouping*/ 
    ORDER BY follownumber 

您可以從克里斯的回答這個轉換更容易LINQ看到。