使用 LINQ 获取连接结果 SQL
Getting join results using LINQ to SQL
我是 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
有问题吗?
如果您不在同一范围内使用查询结果,则必须对其进行类型化,以便声明适当类型的变量。首先为结果对象定义一个class并使用它。将这一切作为一种方法会更清晰。
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
}
我是 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
有问题吗?
如果您不在同一范围内使用查询结果,则必须对其进行类型化,以便声明适当类型的变量。首先为结果对象定义一个class并使用它。将这一切作为一种方法会更清晰。
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
}