【问题标题】:subqueries in Linq to SqlLinq to Sql 中的子查询
【发布时间】:2011-03-08 11:14:32
【问题描述】:

我陷入了 linq 查询,我正在搜索数据库并使用显示结果

DBSearchDataContext db = new DBSearchDataContext();
        object q = from b in db.Products
                   where b.ProductCode.Contains(val) |
                   b.ProductName.Contains(val) |
                   b.Specification.Contains(val) |
                   b.Description.Contains(val) |                       
                   b.Category.Contains(val) 
                   select b;

      GridView1.DataSource = q;
     GridView1.DataBind();

我无法从 categoryID 匹配的类别表中显示类别名称。

我在 sql 中这样做是这样的

如何在 linq 中做到这一点

SELECT ID, ProductCode, DisplayOrder, ProductName, imgThumb, inStock, Status, Amount, (SELECT Category FROM Category AS aaa WHERE (Products.CategoryID = CategoryID)) AS Category FROM Products ORDER BY ID DESC

帮帮我

【问题讨论】:

  • 为什么不使用常规的 LINQ join 关键字?你知道 SQL 中的连接吗?可以使用简单的INNER JOIN 改进您的 SQL 查询。如果你的映射很好,你甚至不需要加入并选择b.Category.Name 或其他任何东西。

标签: c# asp.net linq-to-sql


【解决方案1】:

如果您缺少一些映射,为什么不使用简单的连接?

var q = from p in db.Products
        join c in db.Category on p.CategoryID equals c.CategoryID
        where ...
        select new
        {
          p.ProductCode,
          ...,
          c.Category
        };

或使用适当的映射:

var q = from p in db.Products
        where ...
        select new
        {
          p.ProductCode,
          ...,
          p.Category.Category
        };

【讨论】:

    【解决方案2】:

    您可以将子查询放入 Linq LET 子句中。见

    例如。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-23
      • 2010-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多