gpt4 book ai didi

c# - C# Linq 中的嵌套选择

转载 作者:行者123 更新时间:2023-11-30 13:04:08 25 4
gpt4 key购买 nike

我是 Linq 的新手,无法正常工作。

public class ItemMaster
{
public int ItemId{ get; set; }
//other fields
public IList<ItemDetail> Details { get; set; }
}

public class ItemDetail
{
public int DetailId{ get; set; } ;
public int ItemId{ get; set; } ;
//other fields
}

我的 ViewModel 有

DataTable dtMaster = da.GetItemsMasterDataTable();
DataTable dtDetail = da.GetItemsDetailDataTable();

var list = (from m in dtMaster.AsEnumerable()
select new ItemMaster
{
ItemId = m.Field<int>("ItemId"),
//other fields
Details = (from d in dtDetail.AsEnumerable()
where d["ItemId"] == m["ItemId"]
select new ItemDetail
{
DetailId = d.Field<int>("DetailId"),
ItemId = d.Field<int>("ItemId")
//other fields
}).ToList()
}).ToList();

该列表确实检索了所有主条目,但详细信息计数始终为零。所以嵌套选择不起作用。请帮忙!谢谢。

最佳答案

正如托马斯所说,

当您使用 row["columnName"] 语法访问字段时,值类型被装箱。这样,== 运算符进行引用比较,而不是比较实际值的等号。

考虑以下代码

object foo = 1;
object bar = 1;

// outputs False
Console.WriteLine(foo == bar);
// outputs True
Console.WriteLine(foo.Equals(bar));
// outputs True
Console.WriteLine((int)foo == (int)bar);

所以改变你的where条件

where d["ItemId"] == m["ItemId"]

要么

where Equals(d["ItemId"], m["ItemId"])

where d.Field<int>("ItemId") == m.Field<int>("ItemId")

关于c# - C# Linq 中的嵌套选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10335600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com