2010-12-06 67 views
0

我試着使用這裏提供的建議在linq中使用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

貌似加盟對我說:

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; 

注意,這會多次返回相同的值,如果有具有相同ID的多個領域 - 但我懷疑這是不是這樣的。

可以做更直譯是這樣的:

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

下面是一個有效的和可讀的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; 

查找媽媽!!沒有連接;-)

+0

在SQL級別存在連接存在的原因。我可能是錯的,但這可能會導致退化的表現,只有一小部分拉的記錄是真正匹配的。如果是這樣的話,那麼「有效率」應該以條件爲前提。 – 2010-12-06 12:55:34