gpt4 book ai didi

c# - 使用 LINQ to SQL 获取连接结果

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

我是 LINQ 的新手。我正在尝试连接两个表,但我很难返回结果。

这是我的代码:

 using (DatabaseDataContext db = new DatabaseDataContext())
{
var list = db.Products.Join(db.ProductDetails,
p => p.ID,
d => d.ProductID,
(p, d) => new {
p.ID,p.Photo,d.Name,d.LanguageID
}).Where(d=>d.LanguageID== lang).ToList();
}

好吧,我不能在 using 之外使用变量 list,当我在“using”之外(在它之前)声明变量时,如:var list;

我得到错误:

Implicitly-typed local variables must be initialized

更新:

我将代码更改为:

DatabaseDataContext db = new DatabaseDataContext();

var products = db.Products.Join(db.ProductDetails,
p => p.ID,
d => d.ProductID,
(p, d) => new {
p.ID,p.Photo,d.Name,d.LanguageID
}).Where(d=>d.LanguageID== langs[language].ParseInt()).ToList();

它奏效了。由于我省略了 using,我是否必须执行关闭连接之类的操作?

不使用using有问题吗?

最佳答案

如果您不在同一范围内使用查询结果,则必须对其进行类型化,以便您可以声明适当类型的变量。首先为结果对象定义一个类并使用它。将这一切都作为一种方法会更清晰。

public class Result
{
public int ID { get; set; }
public string Photo { get; set; }
public string Name { get; set; }
public int LanguageID { get; set; }
}
public List<Result> GetJoinResult(int languageId)
{
using (DatabaseDataContext db = new DatabaseDataContext())
{
return db.Products.Join(db.ProductDetails, p => p.ID, d => d.ProductID,
(p, d) => new Result // not anonymous
{
ID = p.ID,
Photo = p.Photo,
Name = d.Name,
LanguageID = d.LanguageID,
})
.Where(x => x.LanguageID == languageId)
.ToList();
}
}

如果定义的类型太多,那么您必须在同一范围内立即使用它。

using (DatabaseDataContext db = new DatabaseDataContext())
{
var results = db.Products.Join(db.ProductDetails, p => p.ID, d => d.ProductID,
(p, d) => new
{
p.ID,
p.Photo,
d.Name,
d.LanguageID,
})
.Where(x => x.LanguageID == languageId)
.ToList();
// do stuff with results
}

关于c# - 使用 LINQ to SQL 获取连接结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29753232/

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