2013-12-15 4 views
1

Как может foll. sql - в Linq. Я использую LinqToEntities, C#. @companyID & @branchID являются параметрамиlinq с нулевым состоянием

select * from tblEmp e 
where e.deleted = 0 and 
(e.companyId = @companyID OR e.companyid is null) and 
(e.branchId = @branchID OR e.branchid is null) 

В настоящем время, есть хранимая процедура тех же, и я использую его в LINQ, как это:

var qry = from d in MYDB.GetData(int companyid, int branchid) 
select new 
{ 
//all reqd. columns... 
} 

так, возможно чтобы написать выше в Linq, напрямую.

EDIT:

public IEnumerable<tblEmp> GetData(Guid gCID, Guid gBID) 
{ 
    var employees = (from e in tblEmp 
       where !e.deleted 
       && (e.companyId == gCID || e.companyid == null) 
       && (e.branchId == gBID || e.branchid == null) 
       select e 
       ).AsEnumerable(); 
} 

// Оба параметра "00000000-0000-0000-0000-000000000000. Я ожидаю все записи, но счет равен 0. Где я ошибаюсь.

ответ

2

Sure:

var employees = (from e in tblEmp 
       where !e.deleted 
       && (e.companyId == aCompanyIdHere || e.companyid == null) 
       && (e.branchId == aBranchIdHere || e.branchid == null) 
       select new 
       { 
        e.Id, 
        e.companyId, 
        e.branchId 
       }); 

Редактировать

запрос должен работать, но я подозреваю, что вы требования немного отличаются. Если вы хотите получить все предметы, когда переданный параметр Guid пуст, вы можете сделать следующее.

public IEnumerable<tblEmp> GetData(Guid gCID, Guid gBID) 
{ 
    var employees = (from e in tblEmp 
        where !e.deleted 
        && (gCID == Guid.Empty || e.companyid == gCID) 
        && (gBID == Guid.Empty || e.branchid == gBID) 
        select e 
        ).AsEnumerable(); 
} 

Но для лучшей читаемости IMO:

public IEnumerable<tblEmp> GetData(Guid? gCID, Guid? gBID) 
{ 
    var employees = (from e in tblEmp 
        where !e.deleted 
        && (gCID == null || e.companyid == gCID) 
        && (gBID == null || e.branchid == gBID) 
        select e 
        ).AsEnumerable(); 
} 

и передать в null вместо Guid.Empty, если вы хотите, чтобы все записи.

var data = GetData(null, null); 
+0

Спасибо. Будет ли это работать, если тип данных является ориентиром вместо int. В DB есть записи, но я получаю 0 счет. Я обновил свой вопрос, что я пробовал. – Ruby

+0

@Ruby Я обновил свой ответ. – Silvermind

+0

Большое спасибо. Я считаю, что первый читаем больше :) – Ruby

1
var qry = (
    from test in MYDB.tblEmp 
    where !e.deleted 
     && (e.companyId == "any id" || e.companyid == null) 
     && (e.branchId == "anyid" || e.branchid == null) 
    select test 
).FirstOrDefault(); 
+0

Возможно, вы случайно правы, но я не вижу «ТОП-1» в его запросе где угодно. – Silvermind

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