LINQ to SQL:属性的可重用表达式?

时间:2010-04-16 09:45:35

标签: c# linq linq-to-sql delegates expression

请原谅我无法更准确地说出标题。

基本上,我有三个链接到表的LINQ对象。一个是产品,另一个是公司,最后一个是映射表,用于存储公司销售哪些产品以及本公司向该产品提供的ID。

我现在正在检索产品列表,如下所示:

var options = new DataLoadOptions();
options.LoadWith<Product>(p => p.Mappings);
context.LoadOptions = options;

var products = (
    from p in context.Products
    select new {
        ProductID = p.ProductID,
        //BackendProductID = p.BackendProductID,
        BackendProductID = (p.Mappings.Count == 0)
            ? "None"
            : (p.Mappings.Count > 1)
                ? "Multiple"
                : p.Mappings.First().BackendProductID,
        Description = p.Description
    }
).ToList();

这会检索我想要的信息。但我希望能够将BackendProductID背后的逻辑移动到LINQ对象中,这样我就可以使用注释行而不是恼人的嵌套三元运算符语句来获得整洁性和可重用性。

所以我将以下属性添加到Product对象:

public string BackendProductID
{
    get
    {
        if (Mappings.Count == 0) return "None";
        if (Mappings.Count > 1) return "Multiple";
        return Mappings.First().BackendProductID;
    }
}

列表仍然相同,但它现在对每个产品进行查询以获得它的BackendProductID。代码更整洁,可重复使用,但现在性能很差。

我需要的是某种表达方式或代表,但我无法理解写一篇。它总是最终查询每一件产品。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

我不能给你一个比你更好的解决方案,但作为一种解决方法......

也许你可以在数据库中创建一个视图,你可以像往常一样将视图拖到设计器上。您可以从视图中读取数据。我认为它会提高性能。

祝你好运。