C# 使用LINQ到SQL获取联接结果

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 {

我是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

我得到一个错误:

隐式类型的局部变量必须初始化

更新:

我将代码更改为:

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
}