当前位置:  开发笔记 > 数据库 > 正文

Linq to SQL:在相关表中按值排序

如何解决《LinqtoSQL:在相关表中按值排序》经验,为你挑选了1个好方法。

我有2个表格,简化形式如下:

Products(
   id: int,
   name: varchar
);

ProductSpecs(
   product_id: int,
   spec_name: varchar,
   spec_value: int
);

现在我需要通过某些规范项的值(例如"价格")对产品(在linq到sql中)进行排序.所以我做这样的事情

var products = from p in db.Products
               from ps in p.ProductsSpecs
               where ps.spec_name == "price"
               orderby ps.spec_value
               select p;

问题是,如果没有具有spec_name"price"的ProductSpec,则根本不包含该产品.我可以使用Union或Concat添加这些产品,但这样就不会保留第一部分的排序.

处理这个问题的最佳方法是什么?

谢谢.



1> Noah..:

首先,我建议你在纯SQL中作为函数或存储过程执行此操作,然后通过linq访问它,或者在产品表中添加price列.即使价格为NULL,看起来价格也是添加到所有产品的正常属性.

SQL:

select p.*
from products p
left outer join productspecs ps on
    p.id = ps.product_id
    and ps.spec_name = 'Price'
order by ps.spec_value

话虽如此,这里有一些奇怪的LINQ应该适用于你的表(我可能有一些拼写错误的列名):

var products = from p in db.Products
               join ps in (from pss in db.ProductSpecs
                           where pss.spec_name== "Price"
                           select pss
                           ) on p.id equals ps.product_id into temp
               from t in temp.DefaultIfEmpty()
               orderby t.spec_value
               select p;

我在上面的一些表设置上测试了这个并创建了5个产品,其中三个产品价格在不同的价值订单中,这个LINQ就像上面的SQL一样排序它们并返回空结果行.

希望这个有效!

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有