使用 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
}