2016-02-24 99 views
-1

我的Web API控制器有一個方法,用於從數據庫表中檢索指定數量的描述。有不同ID的重複描述,所以有時查詢會在使用SELECT TOP時返回重複項。我還添加了隨機(ORDER BY NEWID)以減少獲得雙重球員的機會,但有時重複仍會返回。我想將查詢更改爲SELECT DISTINCT,但不知道如何在我的特定情況下執行此操作。在這裏使用First()似乎很複雜。誰能幫忙?我的方法是如下:將select distinct添加到linq查詢

public List<String> GetRandomDescriptions(string cat, string subcat, int n) 
{  
    using (MyContext ctx = new MyContext()) 
    { 
     var temp = ctx.Interactions.Where(d => (d.Category.Equals(cat) && d.Subcategory.Equals(subcat)))).OrderBy(d=>Guid.NewGuid()).Take(n).Select(d=>d.Description).ToList(); 
     return temp; 
    } 
} 

這裏是我的類:

[Table("[Records]")] 
    public class Interaction 
    { 
     [Key, Column("RECORD_ID")] 
     public string DescId { get; set;} 
     public string Category { get; set; } 
     public string Subcategory { get; set; } 
     public string Description{get; set;} 
    } 
+0

「選擇不同的」 =='選擇(...)。鮮明的()' –

+0

你只有n項想要什麼? –

回答

0

你不需要做滑稽排序依據構造。嘗試是這樣的:

public List<String> GetRandomDescriptions(string cat, string subcat, int n) 
{  
    using (MyContext ctx = new MyContext()) 
    { 
     var temp = ctx.Interactions 
        .Where(d => d.Category.Equals(cat) && d.Subcategory.Equals(subcat))) 
        .Select(d=>d.Description) 
        .Distinct() 
        .ToList(); 
     return temp; 
    } 
} 
1

您可以使用類似這樣

var result = ctx.Interactions 
    .Where(d => d.Category == cat && d.Subcategory == subcat) 
    .Select(d => d.Description) 
    .Distinct() 
    .Take(n) 
    .ToList(); 

的關鍵點是 - 首先應用過濾器,然後選擇說明,然後使它獨特最後採取必要的數項目。

如果您確實需要隨機挑選物品,請在Take之前插入您的OrderBy