【问题标题】:Filter Generic List by multiple values按多个值过滤通用列表
【发布时间】:2014-10-27 17:22:28
【问题描述】:

有一个通用的文档列表,我如何通过 doc id 1 和 2 过滤它。

我已尝试关注 Linq,但它不起作用。我需要过滤列表并将其用作数据源。

List<VisitDocs> listD = default(List<VisitDocs>);
result = from docs in listDwhere docs.DocID == 1 && docs.DocID == 2docs;

rptDocs.DataSource = listD;

【问题讨论】:

  • listD.Where(n => n.DocID == 1 || docs.DocID == "2docs");

标签: c# asp.net linq


【解决方案1】:

你需要||:

result = listD.Where(doc=> doc.DocID == 1 || doc.DocID == 2);

或

result = from docs in listD where docs.DocID == 1 || docs.DocID == 2 select docs;

您的DocID 可以是1 或2,不能同时是两者。您当前的条件是使用&amp;&amp;,这意味着它必须同时是1 和2。

对于分配DataSource 调用ToList 喜欢:

rptDocs.DataSource = result.ToList();

【讨论】:

  • 我可以在数据源中使用结果吗?
  • @user1263981,您应该在查询上调用ToList(),然后再将其分配给DataSource。见:stackoverflow.com/questions/11901264/…
  • 我尝试过使用 ToList,但结果为零。
  • @user1263981,你确定有ID为1的记录或2
【解决方案2】:

docs.DocID == 1 &amp;&amp; docs.DocID == 2 永远不会为真:如果值为 1,则不是 2,反之亦然。您需要使用||(或),而不是&amp;&amp;(和)

【讨论】:

    【解决方案3】:

    请把 && 改为 ||看看有没有效果

    【讨论】:

      【解决方案4】:

      我认为你试图写这样的东西:

      var result = (from docs in listD
                   where docs.DocID == 1 || docs.DocID == 2
                   select docs).ToList();
      
      rptDocs.DataSource = result;
      

      其中 listD 是您的原始列表。请注意,在您的代码示例中,ListD 将为空。

      如果您希望结果同时具有 DocID 值 1 和 2,只需将“&&”替换为“||”即可。使用 "&&" 意味着任何 single 结果应该同时满足两个条件,这是不可能的:单个结果的 DocID 等于 1、2 或其他任何值。所以如果你想用 1 "or" 2 来取每一个结果,你应该使用 OR 逻辑运算符。

      【讨论】:

      • 我非常非常厌倦 SO 的用户在不解释原因的情况下对帖子投反对票,因为我的回答肯定很好而且很有帮助。没有 cmets 的 Downvotes 每次应该花费至少 10 个代表......
      • 我没有投反对票,但我认为这是因为您发布的代码仍在使用 &amp;&amp; 而不是 ||。
      • 也许吧。但我的帖子也涵盖了这一点。首先,我修复了导致代码无法编译的拼写错误,并评论了操作符问题。既然它肯定不能像这样工作,我们可以假设 OP 实际上想要一个 ||。我已经编辑了我的帖子以直接修复操作员...
      猜你喜欢
      • 1970-01-01
      • 2018-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-08
      • 1970-01-01
      • 2019-06-19
      相关资源
      最近更新 更多