gpt4 book ai didi

c# - 林克到 SQL : Most Efficient Way of Looping through List of ID's

转载 作者:太空宇宙 更新时间:2023-11-03 18:42:45 25 4
gpt4 key购买 nike

假设我有一个 ID 列表:

int[] ids = { 1, 2, 3, 4 };

我已经有一个编译的 LINQ 语句,它返回单独的行(我们在这里称它们为“Bar”)。所以我可以这样做:

var foo = new List<Bar>();
var len = ids.Length;
for (int i=0; i < len; i++)
{
foo.Add(db.GetBarByID(ids[i]));
}

我想知道,是否有更有效的方法来做到这一点?每行返回的数据不多(几个 nvarcharint 列),ID 列表最多可以有 50 个。

更新:

我将详细说明“GetBarByID”。这是一个返回“Bar”的简单 LINQ 语句。

class Bar
{
public int ID {get; set;}
public string Name {get;set;}
public int Age {get;set;}
public string Blah{get;set;}
}

IQueryable<Bar> GetBarByID(int ID)
{
return db.Bar
.Where(w => w.Barid == ID)
.SelectMany(b => Othertable.Where(w => w.barid == b.id),
(b, x) => new Bar { ID = s.id, Name = s.name, Age = s.age, Blah = x.blah });
}

旁注:我所说的高效是指干净的代码和明智的性能。

最佳答案

肯定有一种更简单的方式来编写相同的代码:

var foo = ids.Select(id => db.GetBarById(id))
.ToList();

但是,这取决于 db.GetBarById 的实际作用。如果您可以在查询中使用 ids 本身,您也许可以在单个数据库查询中完成所有操作:

var foo = db.Bars
.Where(b => ids.Contains(b.Id))
.ToList();

显然,这并没有使用您现有的 LINQ 查询 - 如果检索单行涉及更多内容,您可能需要做更多的工作。

编辑:好的,现在我们有了 single 方法,它相当简单......虽然你可能应该使用连接,老实说......而且我怀疑你的真实代码有 w.Barid == ID 而不是 w.Barid = ID

var foo = db.Bar
.Where(w => ids.Contains(w.Barid))
.SelectMany(b => Othertable.Where(w => w.barid == b.id),
(b, x) => new Bar { ID = s.id, Name = s.name,
Age = s.age, Blah = x.blah })
.ToList();

关于c# - 林克到 SQL : Most Efficient Way of Looping through List of ID's,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7254387/

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