2015-02-26 3 views
0

Здравствуйте, я должен написать в LINQ SQL-запрос ниже:Перевести SQL в LINQ

Declare @OrgID int 
Declare @OrgFinalID int 
Set @OrgID = 91702 ---91703, 91702, 83279 

select @OrgFinalID = 
     case 
      when ParentOrganisationId is null then ItemID 
      else ParentOrganisationId 
     end 
from Organisations 
where ItemID = @OrgID 

Я пытался писать это, но я не на правильном пути, извините, но я новичок в LINQ:

var OrgID=91207; 
var OrgFinalID = from o in context.Organisations 
       where o.ItemID == OrgID 
       select new 
       { 
        o.ParentOrganisationId == null ? o.ItemID : o.ParentOrganisationId, 
       } 

Я должен поместить с выражением LINQ значение внутри переменной OrgFinalID.

+0

Что такое тип данных в 'ParentOrganisatio nId'? –

+0

ParentOrganisationId является nvarchar – ADC

+0

Попробуйте использовать свойство 'HasValue'. –

ответ

2

Похоже, вы ожидали, что это будет всего лишь один номер? Чем вы можете позвонить .Single() в вашем запросе, что в основном возвращает само значение:

var OrgFinalID = (from o in context.Organisations 
       where o.ItemID == OrgID 
       select new 
       { 
        ID = o.ParentOrganisationId == null ? o.ItemID : Convert.ToInt32(o.ParentOrganisationId), 
       }).Single().ID; 

Также обратите внимание, чтобы позвонить в Convert.ToInt32, который поддерживается Linq к SQL и должны помочь вам избежать проблем литья типа.

Другие варианты:

  • SingleOrDefault - если может быть единственный результат, или никакого результата вообще (не возвращает нуль в данном случае)
  • First - если вы ожидаете один или несколько результатов запроса
  • FirstOrDefault - аналогично SingleOrDefault, возвращает нулевое значение, если результаты не пришли из запроса
+0

o.ParentOrganisationId == null? o.ItemID: o.ParentOrganisationId, по этой ошибке, потому что не существует неявного преобразования между int и строкой – ADC

+0

@ADC, какой из них? Я предполагаю, что 'ParentOrganisationId' является строкой, а' ItemID' является int, правильно? – Andrei

+0

есть. Visual STudio говорит об этой ошибке: Недопустимый декларатор участника анонимного типа. Члены анонимного типа должны быть объявлены с назначением членов, простым именем или доступом к члену. – ADC

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