2012-01-12 45 views
8

我首先使用實體​​框架代碼。我想查詢來自數據庫的實體對List對象。這適用於包含,但我怎樣才能將它與StartsWith?實體框架4.1 Linq包含和啓動與

這是我的代碼:

List<string> values = new List<string>(); 
values.Add("A"); 
values.Add("B"); 
context.Customer.Where(c => values.Contains(c.Name)).ToList(); 

我如何查詢針對與A或B開頭的所有客戶?

回答

10

這應該在內存中工作,但我不知道這是否可以通過EF轉化爲SQL:

context.Customer.Where(c => values.Any(s => c.Name.StartsWith(s))).ToList(); 
+0

fyi更新與ef核心可悲地這得到本地評估 警告:Microsoft.EntityFrameworkCore.Query [20500 ] 無法翻譯LINQ表達式'where {from String text in __texts_0 where [d] .Entry.StartsWith([text])select [text] => Any()}'將被本地評估。 – 2018-02-23 13:37:22

+0

@AnthonyJohnston [This may be related](https://stackoverflow.com/a/44372562/335858) – dasblinkenlight 2018-02-23 13:39:13

2

您不需要將它與StartsWith結合使用,因爲如果它以A或B開頭,那麼它顯然包含A或B.它不能以A或B開頭,也不能包含A或B.

所以只需使用StartsWith而不是Contains。

context.Customer.Where(c => c.StartsWith("A") || c.StartsWith("B")).ToList(); 
+0

我沒有使用String.Contains()而是使用List.Contains()。您的解決方案有效,但不是動態的。例如。針對A-K的查詢。 – LuckyStrike 2012-01-12 16:55:51

+1

@LuckyStrike - 我建議如果你有這樣的要求,你可以將它們包含在你的問題中。否則,你只會浪費大家的時間,拒絕他們不知道的解決方案,而不是你想要的。 – 2012-01-12 17:13:08

0

你可以嘗試結合這兩種功能是這樣的:

IQueryable<Customer> result = (from C in context.Customerwhere C.Name.StartsWith("B") && values.Contains(C.Name)); 
+0

你錯過了從'context.Customerwhere'中的C的空間,它應該來自'context.Customer中的C' – 2015-03-24 16:41:24