在同一个linq查询中使用distinct和startswith

时间:2014-08-13 20:33:25

标签: c# sql asp.net linq

我需要在LINQ中为ASP.net MVC应用程序编写以下SQL查询:

select distinct(COST_CENTER) from FDCostCenterRequest where COST_CENTER like '10%'

FDCostCenterRequest中COST_CENTER列的定义如下:

public string COST_CENTER { get; set; }

我是用以下方式写的:

IEnumerable<FDCostCenterRequest> suggestions = 
    from cc in db.FDCostCenterRequests.Where(cc => 
    cc.COST_CENTER.StartsWith(searchString)).ToList() select cc;

var selected = from costList in suggestions select costList.COST_CENTER.Distinct();

List<string> dropDownInfos = new List<string>();
foreach (var item in selected)
{
    dropDownInfos.Add(item.ToString());
}

但是当我尝试查看dropDownInfos内容时,我得到System.Linq.Enumerable+<DistinctIterator>d__81 1 [System.Char]`用于每条记录。我在这里做错了什么?

4 个答案:

答案 0 :(得分:2)

var yourItems = db.FDCostCenterRequests.Where(cc => cc.COST_CENTER.StartsWith(searchString)).Select(o=>o.COST_CENTER).Distinct().ToList();

答案 1 :(得分:1)

您无法从每个中心获取不同的成本中心,而是将每个中心转换为构成成本中心的一组不同角色。

您可以用不同的方式对查询进行加括号,但如果您只是不在查询和方法语法之间切换那么多,那就更容易:

var query = db.FDCostCenterRequests
    .Where(cc => cc.COST_CENTER.StartsWith(searchString))
    .Select(cc => cc.COST_CENTER)
    .Distinct();

答案 2 :(得分:1)

由于string实现了IEnumerable,因此Distinct正在对其进行操作。将查询的其余部分括在括号中,以便Distinct对查询进行操作。

var selected = (from costList in suggestions
                 select costList.COST_CENTER).Distinct(); 

答案 3 :(得分:0)

我得到了以下内容:

var suggestions = from cc in db.FDCostCenterRequests.Where(cc => cc.COST_CENTER.StartsWith(searchString)).GroupBy(x=>x.COST_CENTER).Select(g=>g.Key)
                          select cc;

我知道这有点圆,但仍然感谢你的回答。