Wil*_*ill 5 c# entity-framework entity-framework-6 visual-studio-2013
我有个问题。当我运行下面的代码时:
var data = context.TableX.Where(w => w.userId == 9999&& w.id == 9999) .Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)
这是生成的查询:
SELECT [Extent1].[id] AS [id], [Extent1].[name] AS [name], [Extent1].[companyId] AS [companyId], [Extent1].[userId] AS [userId] FROM [TableX] AS [Extent1] WHERE (9999 = [Extent1].[userId]) AND (9999= [Extent1].[id]) -- Executing at 01/06/2016 17:28:01 -03:00 -- Completed in 271 ms with result: SqlDataReader
Run Code Online (Sandbox Code Playgroud)
我想知道您是否可以使“Distinct”与查询一起运行,如下所示:
SELECT DISTINCT id, name, companyId AS type FROM TableX WHERE id=9999 AND userId=9999
Run Code Online (Sandbox Code Playgroud)
谢谢。
要获得您想要的查询,您需要首先调用Selectbefore 调用Distinct,以仅获取您需要应用不同的列:
var data = context.TableX.Where(w => w.userId == 9999&& w.id == 9999)
.Select(e=>new {e.id, e.name, e.companyId})
.Distinct()
.ToList();
Run Code Online (Sandbox Code Playgroud)
我很确定第一个查询应该有效,但无论如何另一个解决方案可以应用分组依据:
var data = context.TableX.Where(w => w.userId == 9999&& w.id == 9999)
.GroupBy(e=>new {e.id, e.name, e.companyId})
.Select(g=>new{g.Key.id, g.Key.name, g.Key.companyId})
.ToList();
Run Code Online (Sandbox Code Playgroud)
现在我在另一个上下文中测试了 LinqPad 中的第一个查询,但使用了相同的想法:
var query=Agencies.Where(a=>a.StatusId==1)
.Select(e=>new{e.StateId, e.AgencyName})
.Distinct()
.Dump();
Run Code Online (Sandbox Code Playgroud)
这是生成的 sql:
-- Region Parameters
DECLARE @p0 Int = 1
-- EndRegion
SELECT DISTINCT [t0].[stateId] AS [StateId], [t0].[agencyName] AS [AgencyName]
FROM [Agencies] AS [t0]
WHERE [t0].[statusId] = @p0
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,它应该有效,我真的不知道你的情况发生了什么。
对要通过 LinqPad 执行的第二个查询重复相同的过程:
var query=Agencies.Where(a=>a.StatusId==1)
.GroupBy(e=>new{e.StateId, e.AgencyName})
.Select(g=>new{g.Key.StateId, g.Key.AgencyName})
.Dump();
Run Code Online (Sandbox Code Playgroud)
这是sql代码:
-- Region Parameters
DECLARE @p0 Int = 1
-- EndRegion
SELECT [t0].[stateId] AS [StateId], [t0].[agencyName] AS [AgencyName]
FROM [Agencies] AS [t0]
WHERE [t0].[statusId] = @p0
GROUP BY [t0].[stateId], [t0].[agencyName]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11900 次 |
| 最近记录: |