【问题标题】:LINQ Join query problemLINQ Join查询问题
【发布时间】:2011-09-28 10:21:00
【问题描述】:

我有这个查询,我尝试将 2 个表连接在一起,其中一个包含产品名称和产品编号,并获取产品编号,然后转到另一个查找与产品编号类似的 Art_no。

ProductNamesList = (From ProductSeries In context.Products
                             From ProductRevisions In context.TestResults
                             Where ((ProductSeries.Product = CurrentProduct) And (ProductRevisions.Art_no.Contains(ProductSeries.Product_no)))
                             Order By ProductRevisions.Art_no
                             Select ProductRevisions.Art_no).Distinct.ToList

希望任何人都可以提供帮助, 谢谢。

【问题讨论】:

  • 它似乎没有返回任何值
  • 由于某种原因,它开始工作 O.o 那很奇怪

标签: asp.net vb.net linq


【解决方案1】:

查看帖子:SQL to LINQ ( Case 7 - Filter data by using IN and NOT IN clause)

您的解决方案分为以下两个查询

//first get the list of product which satisfy your condition

    var ids = (from p in context.Products
              Where p.Product = CurrentProduct
              select p.Product_no).ToList();

//second filter the revision products by using contains

    var myProducts = from p in context.TestResults
                     where ids.Contains(p.Art_no)
                     Order By p.Art_no
                     Select p.Art_no;

【讨论】:

  • ProductSeries.Product_no 是 LIKE ProductRevisions.Art_no,它们不相等
  • 我用 2 个查询来做,试图用 1 个查询得到它
【解决方案2】:

假设类结构如下:

public class Context
{
    public IEnumerable<Product> Products { get; set; }
    public IEnumerable<TestResult> TestResults { get; set; }
}

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class TestResult
{
    public int ArtNo { get; set; }
}

还有一个上下文实例:

var context = new Context
                {
                    Products = new List<Product>
                                {
                                    new Product {Id = 1, Name = "P1"}, 
                                    new Product {Id = 2, Name = "P2"},
                                },
                    TestResults = new List<TestResult>
                                {
                                    new TestResult {ArtNo = 1},
                                    new TestResult {ArtNo = 2}
                                }
                };
var currentProduct = context.Products.ElementAt(0);

这应该会返回您期望的结果:

var query = from product in context.Products
            from testResult in context.TestResults
            where product.Id == testResult.ArtNo
            && currentProduct == product
            orderby testResult.ArtNo
            select product.Name;

// Returns a list with one item "P1"
var productNames = query.Distinct().ToList(); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多