gpt4 book ai didi

Linq 到 SQL : order by value in related table

转载 作者:行者123 更新时间:2023-12-04 23:34:30 25 4
gpt4 key购买 nike

我有 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 添加这些产品,但这样不会保留第一部分的排序。

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

谢谢。

最佳答案

首先,我建议您在纯 SQL 中作为函数或存储过程执行此操作,然后通过 linq 访问它,或将价格列添加到您的产品表中。即使该价格为 NULL,价格似乎也是添加到所有产品的正常属性。

查询语句:

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 个产品,其中三个具有不同值(value)顺序的价格,这个 LINQ 就像上面的 SQL 一样对它们进行排序,并返回空结果行。

希望这有效!

关于Linq 到 SQL : order by value in related table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/408779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com