【问题标题】:Linq query with multiple where's [duplicate]具有多个位置的Linq查询[重复]
【发布时间】:2016-02-08 05:44:41
【问题描述】:

我正在尝试使用以下方法查询我的状态更新存储库

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

无论如何,我可以传递一个列表或数组或类似的东西而不是指定每个,而不是连续使用s.Username == "friendN",或者我可以在查询中间使用一个foreach循环。

谢谢

【问题讨论】:

  • 抱歉,autocmets 会很酷!

标签: c# linq linq-to-sql


【解决方案1】:

如果您只需要检查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>)。

【讨论】:

  • 甜蜜,感谢这位出色的回答伙伴,工作就像一种享受。我是一名学生,并且是 linq 的新手,所以我只是想了解一些新语法。我喜欢你写这个friends.Any(fr => s.Username == fr)的方式......非常容易阅读和理解正在发生的事情,但不确定我是否会自己找到它:(感谢帮助
  • LINQ 非常灵活,尤其是在显式使用扩展方法时。一些包含更多信息的好资源是 101 个 LINQ 示例:msdn.microsoft.com/en-us/vcsharp/aa336746.aspx 和扩展方法列表(例如 Any):msdn.microsoft.com/en-us/library/…
【解决方案2】:

你可以这样做:

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

【讨论】:

    【解决方案3】:

    我想我搞砸了你的一些数据类型,但这应该很接近:

        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();
    

    【讨论】:

      猜你喜欢
      • 2015-06-12
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      • 1970-01-01
      • 2015-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多