2013-02-12 60 views
1

我在MVC項目中編寫了一個搜索函數,它與數據庫匹配。Linq,篩選出倍數

數據庫中有這樣的結構:

名稱 - 字符串(數據名稱)

SUBNAME - 字符串(數據的子名)

SomeData - INT(實際數據)

因此,如果我有100個職位名稱和具有不同值的數據的特定子名稱。然後使用相同名稱但不同子名稱的100個帖子。

現在,當我搜索數據庫我使用這個linq代碼;

 var names = db.Graphs 
      .Where(r => r.Name.Contains(term)) 
      .Take(5).Distinct() 
      .Select(r=> new {label = r.Name}); 

我那吼聲那個莫比會得到配有5個不同的答案,但它dosent ...

我得到的第一個100後五個,我想過濾,這樣我只取名字潮頭與子名稱。所以在上面的例子中,我會恢復2個主題。

覺得我已經嘗試了一切,失敗了,所以任何輸入將appriciated。

+0

您是否嘗試過使用Distinct? http://msdn.microsoft.com/zh-cn/library/system.linq.enumerable.distinct.aspx – 2013-02-12 12:45:44

+1

該查詢與您在問題開始時顯示的數據庫結構無關。此外,您沒有顯示任何示例數據,因此不清楚爲什麼示例查詢應該返回2個條目(而不是1或4)。 – 2013-02-12 12:46:03

+1

_「感覺我已經嘗試了所有的東西」_但是你沒有展示你嘗試過的東西。 – 2013-02-12 12:47:18

回答

0
var names = db.Graphs 
    .Where(r => r.Name.Contains(term)) 
    .GroupBy(s=>s.Name).Take(5) 
    .Select(r => new { label = r.FirstOrDefault().Name }); 

你應該在Take()之前應用Distinct(),我希望這會有所幫助。

+0

感謝您的回覆......我真的不知道我做錯了什麼,但我沒有得到它甚至返回名稱的倍數。 – Tim 2013-02-12 13:21:39

+0

嗨,我已經更新瞭解決方案,請嘗試它。我希望這將有所幫助。 – ethicallogics 2013-02-12 14:06:12

+0

感謝您的回覆,它似乎像GroupBy排序一切......我沒有得到它來計算。 Thans很高興爲您提供幫助。 :) – Tim 2013-02-12 14:14:03