2012-07-10 108 views
0

一個SimpleData問題Simpledata隨機排序

我有兩個表:公司和產品。當我查詢並獲得所有符合特定標準的公司產品時,我希望每次返回時都要隨機排列結果。我怎麼做?

此外,

我會愛,(如果你能在這方面幫助)擁有的每家公司產品最大數量。所以

Database.Default.Products.All().Where(Database.Default.Products.Companies.Status=3) 

將返回所有的產品,但我只想要最多3個或每個。

+0

即使在原始SQL中,獲取* random *行樣本也是一件痛苦的事,至少要做到有效。這是一個小衆情景;對於大多數工具,如果「內置n行」內置,我個人會感到非常驚訝。 SimplData是否允許您執行原始SQL?你*可能*必須下降到... – 2012-07-10 12:03:22

回答

3

這樣做沒有內置的支持,因爲它將在Simple.Data支持的不同SQL和NoSQL數據庫中實現的方式太多了。

最好的辦法是將搜索作爲一個存儲過程來實現,您可以從Simple.Data中調用它,就好像它是數據庫對象上的方法一樣。

假設你正在使用SQL Server,這將是

CREATE PROCEDURE RandomProductSearch(@Status int, @Take int) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    SELECT TOP (@Take) Products.* 
    FROM Products 
    JOIN Companies ON Products.CompanyId = Companies.CompanyId 
    WHERE Companies.Status = @Status 
    ORDER BY NEWID() 
END 

然後你就可以從Simple.Data這樣調用:

var products = Database.Default.RandomProductSearch(3,10); 

希望有所幫助。