В Оператор в Линк - PullRequest
       3

В Оператор в Линк

0 голосов
/ 06 декабря 2010

Я попытался использовать предложенное здесь предложение для использования оператора In в linq, но я не смог преобразовать свое требование в оператор LINQ.

Ниже приведен SQL-запрос, который мне нужно преобразовать в Linq

select *
from   navigator_user_field_property
where  user_id = 'albert'
and    field_id in (
       select field_id
       from   navigator_entity_field_master 
       where  entity_id = 1
       and    use_type = 0)
order by field_id

Я хочу, чтобы это было преобразовано в Эффективный Linq.

Большинство ответов касаются предопределенного списка массива строк, который не работает в моем случае.

Спасибо

Ответы [ 2 ]

2 голосов
/ 06 декабря 2010

Похоже на соединение со мной:

var query = from navigator in db.NavigatorUserFieldProperties
            where navigator.UserId == "albert"
            join field in db.NavigatorEntityFieldMasters
                            .Where(f => f.EntityId == 1 && f.UseType == 0)
            on navigator.FieldId equals field.FieldId
            select navigator;

Обратите внимание, что это будет возвращать одно и то же значение несколько раз, если есть несколько полей с одинаковым идентификатором - но я подозреваю, что это не так.

Вы могли бы сделать более буквальный перевод, подобный этому:

var query = from navigator in db.NavigatorUserFieldProperties
            where navigator.UserId == "albert" &&
                db.NavigatorEntityFieldMasters
                  .Where(f => f.EntityId == 1 && f.UseType == 0)
                  .select(f => f.FieldId)
                  .Contains(navigator.FieldId)
            select navigator;

... и что может закончиться переводом на тот же SQL ... но я бы лично пошел с объединением.

1 голос
/ 06 декабря 2010

Вот эффективный и читабельный запрос LINQ:

var fields = 
    from field in db.navigator_entity_field_masters
    where field.entity_id == 1 && field.user_type == 0
    select field;

var properties =
    from property in db.navigator_user_field_properties
    where property.user_id == "albert"
    where fields.Contains(property.field)
    select property;

Смотри, мама! Без соединений; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...