2015-03-17 2 views
1

Я пытаюсь преобразовать приведенный ниже запрос SQL в запрос linq, но не могу это сделать. я могу вам помочь в том, как использовать тип case case, выполнив объединение и конкатенацию специального символа типа '*', если запись существует в другой таблице. Пожалуйста, помогите мне, как это сделать.Linq Query с использованием оператора case и конкатенации специального символа

Select Distinct A.MyID, Title + case when D.MyID is not null then ' *' else '' end as Title , MagTitle 
FROM [MasterTitles] A left outer join TitleDetails D on A.[MyID] = D.[MyID] 
WHERE [PropertyID] is not null 
ORDER BY [Title] 

Есть ли лучший вариант. Я попытался, но не могу понять, как сделать этот тип запроса LINQ. Кто-то, пожалуйста, руководство меня на этом

ответ

0

Попробуйте так:

 var result = database.MasterTitles.Where(m => m.PropertyID != null) 
      .Join(database.TitleDetails, m => m.MyID, t => t.MyID, (m, t) => new { MyID = m.MyID, Title = m.Title + (t.MyID == null ? "" : "*"), MagTitle = m.MagTitle }) 
      .OrderBy(m => m.Title) 
      .Distinct(); 
0

Я предполагаю, что вам нужно что-то вроде этого, не уверен, если LINQ может генерировать скрипт для ?:, если не использовать AsEnumerable и еще до того, как select

(from a in dc.MasterTitles 
join d in dc.TitleDetails on a.MyId equals d.MyId into adJoin 
from ad in adJoin.DefaultIfEmpty() 
order by a.Title 
selec {a.MyId, Title = a.Title + (ad != null ? "*" : ""), a.MagTitle }) 
.Distinct() 
+0

Вы, кажется, на правильном пути, но лучше сделать AsEnumerable часть ответа. Это основная проблема. –

1

Я изменил запрос немного:

var result = from x in context.MasterTitles 
      where x.PropertyID != null 
      orderby x.Title 
      select new { x.MyID, Title = x.TitleDetails.Any() ? x.Title + " *" : x.Title }; 

Я изменил left join к EXISTS() (.Any()). Таким образом, я не нужен Distinct()

+0

И делает '? : 'работа над IQueryable? –

+0

@HenkHolterman С разными именами столбцов, на разных именах таблиц, на EF 6.1.3 да :-) – xanatos

+0

@HenkHolterman Он переведен в 'CASE WHEN (EXISTS (SELECT 1 AS [C1] FROM ... WHERE ... (условия соединения)) THEN [Extent1]. [Title] + N '*' ELSE [Extent1]. [Title] END 'Я скажу, что я написал бы это точно так же (минус' N' перед ' '*' ') – xanatos

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