繁体   English   中英

用两个表将sql转换为linq

[英]convert sql to linq with two tables

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循环来解决此问题,但对此不满意。

我正在尝试获取与goals_df列表匹配的int_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;

假设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 };
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
    });

快速开始-认为您需要加入

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 };

我倾向于使用不带隐式联接的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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM