我是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();
}
好吧,我不能在外面使用变量list
,当我在'using'之前声明变量时(在它之前),如:var list;
。
我收到错误:
必须初始化隐式类型的局部变量
更新
我将代码更改为:
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
的问题?
答案 0 :(得分:3)
如果您未在同一范围内使用查询结果,则必须将其键入,以便声明适当类型的变量。首先为结果对象定义一个类并使用它。把这一切都当作一种方法会更清楚。
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
}