gpt4 book ai didi

c# - 具有多个表的 LinQ 查询和提取数据

转载 作者:太空狗 更新时间:2023-10-29 21:35:57 26 4
gpt4 key购买 nike

我正在执行一个内部连接 ​​4 个表的查询,我必须提取数据并将其转换为字符串并将其放入一个数组中。

    var query = from a in context.as
join b in context.bs on a.prikey equals b.forkey
join c in context.cs on b.prikey equals c.forkey
join d in context.ds on c.prikey equals d.forkey
where b.gender == gender
where c.age == age
select new
{
a.Name,
a.Age,
b.Gender,
};
string[] results = new string[] {}
return results;

一般情况下,如果涉及单表a as = 表 a 的复数形式

as t = query.First() 
string[] results = new string[] {t.Name, t.Age, t.Gender}
return results;

我缺少提取数据的步骤。

最佳答案

这取决于您想对数据做什么。你的代码目前不会真正编译,因为它试图创建一个具有多个属性的匿名类型,所有属性都称为“arg”,但我假设你真的有一个更明智的查询。

最终,您使用多个表的事实在这里无关紧要 - 您一次只能获得一个结果元素:每个结果元素包含来自多个表的数据的事实既不存在也不存在您如何访问它。

现在我刚刚注意到你说你想“提取数据并转换成字符串”。如果可能,您应该在查询中表达这一点。您可能能够在数据库中执行此操作,或者您可能需要强制执行的最后一部分在本地执行,如下所示:

// Not executed yet!
var dbQuery = from a in context.a
join b in context.bs on a.prikey equals b.forkey
join c in context.cs on b.prikey equals c.forkey
join d in context.ds on c.prikey equals d.forkey
where ...
select { a.Age, b.Name, c.Salary, d.Location };

// This still won't talk to the database!
var finalQuery = dbQuery.AsEnumerable()
.Select(x => string.format("Age: {0}; Name: {1}; " +
"Salary: {2}; Location: {3}",
x.Age, x.Name, x.Salary,
x.Location));

// This will finally execute the query
string[] results = finalQuery.ToArray();

现在您不必这样做 - 但它可能是最好的方法,至少对于您提供给我们的信息量来说是这样。如果您能告诉我们更多有关您如何尝试合并多个表中的数据的信息,我们可能会为您提供更多帮助。

编辑:好的,现在您已经向我们提供了更多信息,我想您想要:

var query = from a in context.a
join b in context.bs on a.prikey equals b.forkey
join c in context.cs on b.prikey equals c.forkey
join d in context.ds on c.prikey equals d.forkey
where ...
select new string[] { a.arg, b.arg, c.arg, d.arg };

string[] results = query.First();

我还没有尝试在 LINQ to SQL 中创建数组...可能可以工作,或者您可能需要通过匿名类型和 AsEnumerable 按照我回答的前面部分。

您还应该考虑如果没有结果或有多个结果,您希望发生什么。

编辑:看过编辑后的问题后,您确实可以像对待单个表一样对待多个表。一旦结果被投影到匿名类型中,您将使用完全相同的代码来处理结果:

var query = from a in context.as
join b in context.bs on a.prikey equals b.forkey
join c in context.cs on b.prikey equals c.forkey
join d in context.ds on c.prikey equals d.forkey
where ...
select new { a.Name, a.Age, b.Gender };

var result = query.First();
// Call ToString appropriately on each property, of course
string[] array = new string[] { result.Name, result.Age, result.Gender };

关于c# - 具有多个表的 LinQ 查询和提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7593227/

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