【问题标题】:Why is my Where clause being ignored in this LINQ statement?为什么在此 LINQ 语句中忽略了我的 Where 子句?
【发布时间】:2015-03-24 14:58:24
【问题描述】:

提供的 Linq 语句旨在仅带回有孩子读过《哈克……》一书的父母的数据。但由于某种原因,我的查询似乎忽略了Where 子句,因为我每次都返回整个数据集Parents。这个查询在哪里失败?为什么Where 似乎不影响结果?

List<Parent> we = Parents.Select(par => new Parent
{
    ParentID = par.ParentID,
    Children = parents.SelectMany(parData => parData.Children).ToList().Where(child => new Child
    {
        ChildID = child.ChildID,
        Books = child.Books
    }.Books.Contains("Huck........")).ToList()
}).ToList();

public class Parent
{
    public Parent() { }

    public int ParentID { get { return _parentID; } set { _parentID = value; } }
    public List<Child> Children { get { return _child; } set { _child = value; } }
}
public class Child
{
    private int _childID;
    private List<string> _targets;

    public Child() { }

    public int ChildID { get { return _childID; } set { _childID = value; } }
    public List<string> Books { get { return _books; } set { _books = value; } }
}

表格

 Parent ID |     Parent      | Child ID |     Child     |     Books 
1          | John            | 4        | Suzy          | Grapes of...
1          | John            | 4        | Suzy          | Huck........
1          | John            | 5        | James         | The adven...
2          | Sally           | 4        | Suzy          | Grapes of...
2          | Sally           | 4        | Suzy          | Huck........
2          | Sally           | 5        | James         | The adven...
3          | Fred            | 6        | Jane          | Purple......

【问题讨论】:

  • 我想知道Convert.ToInt32("Huck........") 在转换为 SQL 时会转换成什么。这没有任何意义。您正在尝试将字符串转换为数字。哇?
  • 不确定是否严重... o.o
  • @spender 抱歉,打错了。没有更多的转化。
  • @Volearix 但这不会编译。 Books 是一个整数列表,而不是字符串...
  • @Volearix 编辑将这个问题从一个有意义的问题变成了一个无用的问题,代码无法编译。

标签: c# linq class generics


【解决方案1】:

所以...

.Where(child => new Child
{
    ChildID = child.ChildID,
    Books = child.Books
}.Books.Contains(Convert.ToInt32("Huck........"))

可以缩短为

.Where(child => child.Books.Contains(Convert.ToInt32("Huck........"))

但是调用Convert.ToInt32("Huck........") 不会给你一个标题为"Huck........" 的书的ID。它将字符串转换为数字,结果有些无用。

【讨论】:

  • 这仍然会产生所有结果,而不仅仅是带有 Book "Huck....." 的结果。正是我开始的,只是更短。
  • 是的。我没有更改我的代码中的任何内容,只是试图指出创建一个新的Child 只是为了访问它的Books 集合的冗余。您从根本上误解了如何对 Books 集合执行查询。它只包含int 的列表。我假设这对应于数据库中Book 行的ids。您需要想办法将实际的Book 数据引入查询并查询Book 的标题。
  • @Volearix 发布您的实际代码,而不是您尝试重新输入的充满错误的代码, Convert.ToInt32("Huck....") 只会给您一个例外,因为您无法转换将非数字字符串转换为 int,这毫无意义,人们试图告诉您的是,您在我们可以修复的地方没有小错误,包括您的所有代码和您似乎拥有的所有逻辑你的头在它周围没有意义。所以发布你的实际代码(在测试它编译和运行之后再发布它)然后清楚地发布你想要实现的目标(不要试图猜测什么“不起作用”)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-31
  • 1970-01-01
  • 2021-01-08
  • 1970-01-01
相关资源
最近更新 更多