2010-06-23 50 views
1

在下面的代碼中,value是一個以逗號分隔的值的字符串,每個值都是一個類型名稱。我想獲取已經與任何這些類型鏈接的實體或者在其描述中具有這些類型之一的實體。我已經寫了下面的linq到sql服務,並且我總是得到0,當肯定有這些類型的實體時。你能幫忙嗎?使用Linq進行sql查詢的幫助

string[] allValues = value.Split(','); 

var allTypes = ModelFactory.GetRepository<IRestaurantTypeRepository>().GetAllTypes(); 

return from ent in matchingEntities 
     from typeLink in ent.EntityRestaurantTypeLinks 
     join type in allTypes on typeLink.RestaurantTypeId equals type.RestaurantTypeId 
     where allValues.Contains(typeLink.RestaurantType.TypeName) 
     || (
      allValues.Contains(type.TypeName) 
      && ent.Description.Contains(type.TypeName) 
      ) 
     select ent; 

編輯

我已經分手聲明一分爲二。之後,第二個聲明變成這樣。

from ent in matchingEntities 
         where allValues.AsEnumerable().Any(va =>  
         ent.Description.Contains(va)) 
         select ent; 

在此,allValues是string []類型。 ent.Description是字符串內容。我只想獲取其描述包含來自allValues的任何值的實體。上述說法並沒有給出結果。

回答

1

從您的問題描述,這聽起來像你的意思or,而不是and

return from ent in matchingEntities 
     from typeLink in ent.EntityRestaurantTypeLinks 
     join type in allTypes on typeLink.RestaurantTypeId equals type.RestaurantTypeId 
     where allValues.Contains(typeLink.RestaurantType.TypeName) 
      || allValues.Contains(type.TypeName) 
      || ent.Description.Contains(type.TypeName) 
     select ent; 

否則,您必須查詢現在返回「已與這些類型的或鏈接的所有實體(是這些類型中的一種,並且在其描述中有這些類型之一)「

+0

@lc,我已經嘗試了您的解決方案並且仍然獲得0個結果。 – mohang 2010-06-23 09:47:36

+0

@mohang,你可能會遇到大小寫敏感的問題嗎?我看到它,它應該工作。另外,你在運行時檢查過'allValues',如果你不用where子句進行過濾,那麼實體將被返回。 – 2010-06-23 10:04:48