2010-03-31 45 views
1

我試圖用s.Username == "friendN"的使用以下Linq查詢與多個地方的

var result = (from s in _dataContext.StatusUpdates 
        where s.Username == "friend1" && s.Username == "friend2" etc... 
        select s).ToList(); 

查詢我的狀態更新倉庫,而不是不斷有反正我可以通過列表或數組或類似的東西,而當指定每一個,或者我可以在查詢中使用foreach循環。

感謝

+0

http://stackoverflow.com/questions/679644/multiple-where-clause-in-linq – Jimmy 2010-03-31 17:55:00

+0

哇,neato的可能的副本。 Autocomments。 – Jimmy 2010-03-31 17:55:29

+0

對不起,autocomments會很酷! – Dan 2010-03-31 17:58:21

回答

0

如果你只需要要檢查Username屬性是否具有某個指定值,可以創建一個值列表,然後使用方法,如AllAny來檢查某些條件是否適用於陣列的任何/所有元素。

雖然您的示例看起來有點可疑 - 用戶名s.Username不能等於多個不同的字符串。你想檢查它是否與任何(指定)名稱相同?這可能是這樣寫的:

var friends = new[] { "friend1", "friend2", ... }; 
var result = 
    from s in dc.StatusUpdates 
    where friends.Any(fr => s.Username == fr) 
    select s; 

這將返回使得Username屬性等於任何指定的朋友名字的所有狀態更新(指定爲一個數組,但你可以使用任何IEnumerable<string>)。

+0

甜蜜,謝謝你這個優秀的回答隊友,工作就像一個享受。我是一名學生,也是linq的新成員,所以我只是想解決一些新的語法問題。 我喜歡你寫這個friends.Any(fr => s.Username == fr)的方式...很容易閱讀和理解正在發生的事情,但不知道如果我會自己找到它:(謝謝對於幫助 – Dan 2010-03-31 18:14:14

+0

LINQ非常靈活,特別是在使用擴展方法的時候,更多的信息是101 LINQ示例:http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx和擴展方法(例如'Any'):http://msdn.microsoft.com/en-us/library/system.linq.enumerable_methods.aspx – 2010-03-31 18:49:45

0

呦能做到這一點是這樣的:

IQueryable<s> query= _dataContext.StatusUpdates; 
foreach (var item in names) 
{ 
    query = query.Where(p=>p.Username == item); 
} 
List<s> result = query.ToList(); 
0

我想我搞亂了一些數據類型你的,但是這應該是接近:

var names = new List<string>(); 
    // populate names 

    var updates = new List<StatusUpdate>(); 
    // populate updates 

    var result = (from s in updates 
      where names.Contains(s.ToString()) 
      select s).ToList();