【问题标题】:convert sql to linq with two tables使用两个表将 sql 转换为 linq
【发布时间】:2014-11-06 12:49:32
【问题描述】:
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 循环强制解决了这个问题,但对它不满意..

我正在尝试获取与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;

【问题讨论】:

  • 那么您不满意的当前解决方案是什么?请显示一些代码
  • 需要了解有关对象的详细信息。你用什么来代表这张唱片?

标签: c# .net linq join lambda


【解决方案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 };

【讨论】:

    【解决方案2】:
    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
        });
    

    【讨论】:

      【解决方案3】:

      快点 - 认为你需要加入

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

      【讨论】:

        【解决方案4】:

        我倾向于使用没有隐式连接的 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
        

        您可以从 Chris 的回答中看到这更容易转化为 linq。

        【讨论】:

          猜你喜欢
          • 2012-07-08
          • 1970-01-01
          • 1970-01-01
          • 2021-05-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多