2015-08-13 4 views
2

У меня есть таблица продуктов и таблица действий. Каждый продукт состоит из разных видов деятельности. Что я хочу, это отображать имя продукта, цену и т. Д. И все действия (то есть все действия в одном столбце), которые являются частью этого продукта в сетке данных с помощью LINQ Ниже моего запросЗапрос linq для возврата строки из списка

using (bungeedbEntities context = new bungeedbEntities()) 
{ 
    var bookingData = from con in context.bookings 
    join agn in context.agents on con.main_agent_id equals agn.code 

    select new POS_LINK.BusinessObjects.Bookings 
    { 
     Product = con.product_name, 
     Activity = String.Join(",", (from con1 in context.bookings 
            join acp in context.booking_activity on con1.code equals acp.booking_code 
            join agn in context.agents on con1.main_agent_id equals agn.code 
            join act in context.activities on acp.activity_code equals act.code 
            select act.name).ToArray()), 
    ReservationCode = con.main_agent_voucher, 
    CostOfSale = 0.00M, 
    DateOfActivity = (DateTime)con.date_of_activity, 
    Notes = con.notes, 
    Quantity = (int)con.pax, 
          Child_quantity = 0, 
          Child_cost_percentage = 0, 
          CostPerPerson = 0.00M, 
          SubAgentRef = "56789", 
          SubAgentName = con.sub_agent_name, 
          ClientName = con.client_name, 
          MainAgent = agn.agent_name, 
          Consultant2 = con.sub_agent_consultant          
         }; 
    return bookingData.ToList(); 

При управлении я получаю следующее error- LINQ для лиц не признает «System метода. String Join (System.String, System.String []) ', и этот метод не может быть переведен в выражение хранилища.

Я, кажется, закончились идеи у кого есть лучшее решение для этого спасло бы меня от много царапины на голове

+0

'String.Join' не переводится в Linq на SQL, также если бы это было так, вы выполняли бы sub select для каждой строки результата, которая вообще не является совершенной. Рассмотрите результаты группировки и выполните объединение на более позднем этапе. –

ответ

0

Вы должны сделать это в два этапа: первый шаг выбирает данные, а второй шаг переводит его в строку с string.Join:

var bookingData = (from con in context.bookings 
    join agn in context.agents on con.main_agent_id equals agn.code 
    select new { // Construct an anonymous type with the relevant parts 
     Product = con.product_name, 
     ActivityData = (from con1 in context.bookings 
         join acp in context.booking_activity on con1.code equals acp.booking_code 
         join agn in context.agents on con1.main_agent_id equals agn.code 
         join act in context.activities on acp.activity_code equals act.code 
         select act.name), 
     ReservationCode = con.main_agent_voucher, 
     DateOfActivity = (DateTime)con.date_of_activity, 
     Notes = con.notes, 
     Quantity = (int)con.pax, 
     SubAgentName = con.sub_agent_name, 
     ClientName = con.client_name, 
     MainAgent = agn.agent_name, 
     Consultant2 = con.sub_agent_consultant          
    }).AsEnumerable() // Bring this into memory 
    .Select(p => new POS_LINK.BusinessObjects.Bookings { 
     Product = p.Product, 
     Activity = string.Join(", ", p.ActivityData.ToArray()), 
     ReservationCode = p.ReservationCode, 
     CostOfSale = 0.00M, 
     Notes = p.Notes, 
     Quantity = p.Quantity, 
     Child_quantity = 0, 
     Child_cost_percentage = 0, 
     CostPerPerson = 0.00M, 
     SubAgentRef = "56789", 
     SubAgentName = p.SubAgentName, 
     ClientName = p.ClientName, 
     MainAgent = p.MainAgent, 
     Consultant2 = p.Consultant2 
    }); 
return bookingData.ToList(); 

идея проста: во-первых, вы построить анонимный тип, который имеет всю необходимую информацию, в том числе перечисления acc.name с, то вы заставите его в память по телефону AsEnumerable(), и, наконец, постройте свой POS_LINK.BusinessObjects.Bookings объектов с использованием LINQ-to-Object, который понимает string.Join.

+0

thanx @dasblinkenlight вы спасли мой день .... это сработало – tyndo

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