gpt4 book ai didi

c# - Linq 查询产生不正确的结果

转载 作者:太空狗 更新时间:2023-10-29 23:12:57 28 4
gpt4 key购买 nike

考虑以下 linq查询

var result = from a in 
from b in filledTable
join c in distinctList on b[0].SerialNumber equals c.Field("SERIAL NUMBER")
select new { b, c }
group a by new { a.b[0].SerialNumber } into d
select new
{
Id = d.Select(x => x.b[0].Id),
SerialNumber = d.Select(x => x.b[0].SerialNumber),
// This part is not producing the correct output.
ImportTable = d.Select(w => w.c.Table
.AsEnumerable()
.GroupBy(y => y.Field("SERIAL NUMBER"))
.Select(z => z.First())
.CopyToData‌​Table())
};

filledTable在我的 linq 查询中是一个 List<dynamic>sproc 返回的值填充和 distinctListList<DataRow>我区分来自 DataTable 的值如下:

List<DataRow> distinctList = dt.AsEnumerable().Distinct(DataRowComparer.Default).ToList();

我的 Linq查询产生以下 JSON

[
{
"FilledTableList":[
[
{
"Id":[
2
],
"SerialNumber":[
"1073410"
],
"ImportTable":[
[
{
"SERIAL NUMBER":"1073410",
"PRODUCT TYPE":"Product A"
},
{
"SERIAL NUMBER":"1073411",
"PRODUCT TYPE":"Product B"
}
]
]
},
{
"Id":[
-1
],
"SerialNumber":[
"1073411"
],
"ImportTable":[
[
{
"SERIAL NUMBER":"1073410",
"PRODUCT TYPE":"Proeduct A"
},
{
"SERIAL NUMBER":"1073411",
"PRODUCT TYPE":"Product B"
}
]
]
}
]
]
}]

但我想要以下JSON输出

[
{
"FilledTableList":[
[
{
"Id":[
2
],
"SerialNumber":[
"1073410"
],
"ImportTable":[
[
{
"SERIAL NUMBER":"1073410",
"PRODUCT TYPE":"Product A"
}
]
]
},
{
"Id":[
-1
],
"SerialNumber":[
"1073411"
],
"ImporTable":[
[
{
"SERIAL NUMBER":"1073411",
"PRODUCT TYPE":"Product B"
}
]
]
}
]
]
}]

所以 ImportTable节点只包含与上述FilleTabledList中序列号匹配的信息节点。其他一切似乎都按 Linq 的预期工作查询除此之外。有人可以告诉我哪里错了吗

更新:

我的 filledTable包含以下两项:

{ Id = 2, SerialNumber = "1073410"}
{ Id = -1, SerialNumber = "1073411"}

最终我会在列表中有更多的项目,但只是为了弄清楚为什么更多的 linq 查询不起作用,我将它缩小到只有项目

最佳答案

created a fiddle ,这样可以更轻松地传达可用数据和预期结果。

当我理解正确时,您希望获得所有产品的列表,在 filledTable 中列出,然后从 dataTable 中找到具有相同序列号的所有元素。

如果这是正确的,那么 LINQ 查询必须是:

    var result = filledTable.GroupJoin(distinctList, product => product.SerialNumber, row => row.Field<string>("SERIAL NUMBER"), (Product, Rows) => new { Product, Rows })
.Select(group => new
{
Id = group.Product.Id,
SerialNumber = group.Product.SerialNumber,
ImportTable = group.Rows.CopyToDataTable()
});

结果是

[
{
"Id": 2,
"SerialNumber": "1073410",
"ImportTable": [
{
"SERIAL NUMBER": "1073410",
"PRODUCT TYPE": "Product A"
}
]
},
{
"Id": -1,
"SerialNumber": "1073411",
"ImportTable": [
{
"SERIAL NUMBER": "1073411",
"PRODUCT TYPE": "Product B"
}
]
}
]

关于c# - Linq 查询产生不正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40739692/

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