2014-11-06 42 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看到。