2010-03-31 54 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();