конвертировать sql в linq с двумя таблицами

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, но не доволен этим.

Я пытаюсь получить список goals_df который соответствует списку int_goals_df.

Любые советы будут очень признательны! Спасибо !

EDIT - вот код, который я использую:

//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
    Так чем же ваше нынешнее решение не устраивает вас? Покажите код пожалуйста
  • 0
    Нужно знать ваши детали относительно ваших объектов. Что у вас есть представление этой записи?
Теги:
linq
join
lambda

4 ответа

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню