0
KEY            NAME            REPLACED_BY
1              Foo 1.0         3
2              Bar 1.0         NULL
3              Foo 2.0         NULL

这应该用一个表来表示一个数据库PRODUCT表。产品实体有 3 个属性KEYNAMEREPLACED_BY

我想知道的是,如果我从上下文中获取产品:

var product = context.PRODUCT.FirstOrDefault(p => p.KEY == 3);

有没有办法使用 Lambda 表达式来获取所有以前版本的产品(使用该REPLACED_BY字段)?还是我需要做一个 foreach 循环?

4

2 回答 2

1

如果您的数据库中有适当的关系,那么您可以像这样访问前一个:

var lastProduct = product.Replaced;//or what ever you call your relationship

考虑到这一点,您可以创建这样的函数:

List<Product> GetPreviousProducts(Product current)
{
    List<Product> results = new List<Product>();

    Product previous = current.Replaced;

    while(previous != null)
    {
        results.Add(previous);
        previous = previous.Replaced;
    }

    return results;
}
于 2013-04-26T15:50:43.503 回答
0

如果我明白你想要做什么,你可以尝试像这样加入表格:(我这里没有任何要调试的东西,所以也许可以加一点盐)

var products = (from p in context.PRODUCT
                join r in context.PRODUCT on p.KEY == r.REPLACED_BY
                select r)
               .Union
               (from x in context.PRODUCT where x.KEY == 3 select x);

问题是除非您有另一个通用标识符(例如名称)并且可能将版本号保留在单独的列中,否则您无法仅获取由密钥标识的产品。

于 2013-04-26T15:47:28.020 回答