2017-02-13 9 views
0

В блоке кода у меня есть Foreach, который я использую для запуска и подсчета конкретных фрагментов, которые могут или не могут существовать в базе данных. В основном для каждой части заказа, я продолжаю подсчитывать группы продуктов, к которым относятся, а затем к подразделению, к которым принадлежат эти группы продуктов. Для этого я использую этот LINQ запрос:Запрос LINQ, не возвращающий одно значение, которое должно быть там

foreach (var OrderDtl_yRow in (from ThisOrderDtl in Db.OrderDtl 
                join ThisProdGrup in Db.ProdGrup on 
        ThisOrderDtl.ProdCode equals ThisProdGrup.ProdCode 
        where 
         ThisOrderDtl.Company == Session.CompanyID && 
         ThisOrderDtl.OrderNum == 195792 
         select new 
         { 
          ProdCode = ThisOrderDtl.ProdCode, 
          Division = ThisProdGrup.Division_c, 
          OrderNum = ThisOrderDtl.OrderNum, 
          OrderLine = ThisOrderDtl.OrderLine 

         })) 
         { ....counting things... } 

В настоящее время у меня есть окна сообщений, установленных для возврата значения для меня, как этот процесс происходит. Я получаю все, чтобы вернуться правильно, кроме раздела, который всегда отображается как пустой в MessageBoxes (так что NULL я бы предположил). Так что мои счетчики для дивизии не прибавляют.

Если я что из в LINQPad я не уверен, как вернуть результаты Еогеасп, но я попробовал его с

if(OrderDtl_yRow.Division != null && OrderDtl_yRow.Division != "") 
{i++;} 
i.Dump(); 

и получил 5 (Были 5 строк я ожидал, так что я в наименее тянет наше что-то). Потом я преобразовал его в более простом заявлении FirstOrDefault, чтобы проверить одно значение, как

var OrderDtl_yRow = (from ThisOrderDtl in OrderDtl 
                join ThisProdGrup in ProdGrup on 
        ThisOrderDtl.ProdCode equals ThisProdGrup.ProdCode 
        where 
         ThisOrderDtl.OrderNum == 195792 && 
         ThisOrderDtl.OrderLine == 1 
         select new 
          { 
          ProdCode = ThisOrderDtl.ProdCode, 
          Division = ThisProdGrup.Division_c, 
          OrderNum = ThisOrderDtl.OrderNum, 
          OrderLine = ThisOrderDtl.OrderLine 
          }).FirstOrDefault(); 

Тогда, если я делаю OrderDtl_yRow.Dump() я получаю мой результат и достаточно точно, Отдел проступает. Таким образом, все признаки указывают на то, что это нормально, но я не могу принести значение, в котором я действительно нуждаюсь в нем. Мысли? Благодаря!

P.S. Для тех, кто знаком с Epicor ERP Division, является полем UD, поэтому он технически относится к таблице ProdGrup_UD, но в Epicor он признал, что, поскольку таблица ProdGrup просто прекрасна, ее единственный SQL, который заставляет вас присоединиться к _UD к родительской таблице. Я пытался присоединиться к нему в любом случае для funsies, и ему это не понравилось, потому что он знал, что колонка уже там. Так что все должно быть хорошо.

UPDATE: Rookie Move, не загружал данные отдела в тестовую среду, поэтому ничего не было, а затем проверял данные Live там, где они существовали, и поцарапал голову о том, почему это не соответствует. Но я кое-что узнал о LinqPad и Linq, поэтому это не было бесполезным упражнением.

ответ

0

Вам нужно поиграть еще в Linqpad, чтобы посмотреть, что происходит, Установите язык на C# программу, нажмите F4 и добавьте ссылки на Server \ Bin \ Epicor.System.dll и Server \ Assemblies \ Erp.Data.910100 .dll и укажите файл app.copnfig в файле Server \ web.config. В главном блоке создайте себе контекст Db с помощью var Db = new Erp.ErpContext();

Linqpad может отображать сложные структуры данных, поэтому вам не нужно было делать FirstOrDefault в вашем последнем примере. например:

void Main() 
{ 
    var Db = new Erp.ErpContext(); 

    var sessionCompany = "EPIC06"; 

    var x = (from hed in Db.OrderHed 
      join dtl in Db.OrderDtl 
       on new { hed.Company, hed.OrderNum } 
       equals new { dtl.Company, dtl.OrderNum } 
       into dtlList 
      where 
       hed.Company == sessionCompany 
      select new { hed, dtlList }) 

      .Dump(); 
} 

отметить также, что в SQL dbo.ProdGrup это автоматически генерируемый вид, что соединяет таблицы Erp.ProdGrup и Erp.ProdGrup_UD для вас.

+0

Благодарим за внимание! Я еще не много играл в LinqPad. Я помню этот кусочек теперь, когда ты упоминаешь об этом. Я сделал так, как вы предлагали, и он отлично подбирает данные отдела. Я не знаю, где разрыв между результатами, которые я могу видеть, и работать с Epicor ... hmm ... – BWoods

+0

Или я просто идиот. Я забыл, что не загружал эти данные в нашу систему Dev, где я тестирую код в Epicor. Естественно, я использую Live, чтобы просто потянуться и посмотреть на данные и почесывать голову о том, почему это не соответствует ... Ошибки новичков. Но спасибо за ваш ответ, это, по крайней мере, сделало LinqPad более полезным для меня, чтобы получить прибыль. – BWoods

 Смежные вопросы

  • Нет связанных вопросов^_^