эквивалент if-else через запрос linq-to-sql в предложении where c # - PullRequest
3 голосов
/ 22 мая 2010

По сути, я хотел иметь оператор if-else в своем операторе linq to sql.

var query = from d in database
            if(x == y) {
                where d.Attr = x
            }
            else {
                 where d.Attr = y
            }
            select d;

Есть идеи?

Ответы [ 6 ]

8 голосов
/ 22 мая 2010

Предположим, вы имели в виду ==, а не =:

from d in database
where (x == y && d.Attr == x) ||
      (x != y && d.Attr == y)
select d;
7 голосов
/ 22 мая 2010

Разве это не то же самое, что

var query = from d in database
            where d.Attr == y
            select d;

Ваша ситуация (или похожая, более реалистичная) может быть обработана с помощью простого условия в предложении where. Для более сложных запросов вы можете использовать методы расширения для создания запроса, довольно легко реализующего условия, или использовать PredicateBuilder для создания произвольно сложных условий.

var query = db.Table;
if (x == y)
{
   query = query.Where( d.Attr == z );
}
else
{
   query = query.Where( d.Attr == t );
}

var predicate = PredicateBuilder.True<Foo>()
                                .And( f => f.Attr == y )
                                .And( f => f.Attr == x )
                                .Or( f => f.Attr == z );
var query = db.Foo.Where( predicate );
0 голосов
/ 06 марта 2015

var query = из d в базе данных, где (x == y)? d.Attr = x: d.Attr = y выберите d;

0 голосов
/ 22 мая 2010

Это решение, предполагая, что вы имели в виду ==, а не =:

var query = from d in database
            where (x == y ? d.Attr == x : d.Attr == y)
            select d;

Однако это логически равно следующему:

var query = from d in database
            where d.Attr == y
            select d;

Потому что,если x == y истинно, то d.Attr == x и d.Attr == y будут равными.

0 голосов
/ 22 мая 2010

не

if(x == y) { 
                where d.Attr = x 
            } 

будет таким же, как

if(x == y) { 
                where d.Attr = y 
            } 

если х == у?

так не могли бы вы просто использовать

where d.Attr = y
0 голосов
/ 22 мая 2010

РЕДАКТИРОВАТЬ: Я думаю, что я мог неправильно понять, что вы хотели сделать.

Я не уверен, если?(троичный) оператор будет работать в Linq to SQL, но попробуйте это:

from d in database select (x == y) ? x : y
...