2013-02-12 61 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