C# 使用LINQ到SQL获取联接结果
我是LINQ的新手。我正在尝试合并两个表,但返回结果时遇到困难 这是我的密码:C# 使用LINQ到SQL获取联接结果,c#,linq,linq-to-sql,C#,Linq,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 {
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代码>
我得到一个错误:
隐式类型的局部变量必须初始化
更新:
我将代码更改为:
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();
它成功了。由于我使用
省略了,是否需要关闭连接之类的操作
使用
时不使用是否有问题?如果不在同一范围内使用查询结果,则必须将其类型化,以便可以声明适当类型的变量。首先为结果对象定义一个类并使用它。把这一切当作一种方法会更干净
public class Result
{
public int ID { get; set; }
public string Photo { get; set; }
public string Name { get; set; }
public int LanguageID { get; set; }
}
我知道这一点,但对于我将从不同联接中获得的许多结果,我不想为它们中的每一个创建结构或类(因为好奇和懒惰)我想知道如何获得结果使用使用任何方法都不重要possible@AshkanMobayenKhiabani无法从方法返回匿名类型。在这种情况下,您需要在方法中执行所有逻辑。最好是创建所有模型。我在问题中添加了一个更新,请您看一下并说出您的意见好吗?这很好,您可能最终会想要处理上下文。在我的脑海里,我不记得如果你忘记了,这是否会是灾难性的。连接在需要时使用IIRC,但上下文正在跟踪实体和其他内务管理,可能会占用大量内存,您可能希望快速恢复这些内存。
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
}