var EmpRecList = (from ur in db.Users
join ug in db.UserGroups on ur.UserGroupID equals ug.UserGroupID
select new
{
lastName = ur.LastName,
userID = ur.UserID,
firstName = ur.FirstName,
userGroupName = ug.UserGroupNameLang1
}).Where(oh => oh.userGroupName.StartsWith(userCur.UserGroupName))
.OrderBy(x => x.lastName);
我有这段代码。这里的问题是,即时获取具有相同用户ID的2条记录。我想根据用户ID创建一个独特的记录。谢谢。尝试使用不同的方法,但没有成功。
答案 0 :(得分:1)
您可以使用GroupBy而不是获得第一条记录。它会在订购后根据用户ID获取EmpRecList中的第一条记录,但不能确保您想要获得的结果。
试试这个
var EmpRecList = (from ur in db.Users
join ug in db.UserGroups on ur.UserGroupID equals ug.UserGroupID
select new
{
lastName = ur.LastName,
userID = ur.UserID,
firstName = ur.FirstName,
userGroupName = ug.UserGroupNameLang1
})
.Where(oh => oh.userGroupName.StartsWith(userCur.UserGroupName))
.GroupBy(g => g.userID).Select(s => s.First()).ToList().OrderBy(x => x.lastName)
答案 1 :(得分:0)
这里的问题是你不是Users
的明确列表,但你的LINQ查询正在将一些Users
与多个UserGroups
分组。由于UserGroups
的不同,对此执行不同的操作不会为您提供唯一的列表。
您需要在where子句中解决此问题。它需要更具体。而不是您的谓词是StartsWith
,而是使用Equals
。
var EmpRecList = (from ur in db.Users
join ug in db.UserGroups on ur.UserGroupID equals ug.UserGroupID
select new
{
lastName = ur.LastName,
userID = ur.UserID,
firstName = ur.FirstName,
userGroupName = ug.UserGroupNameLang1
}).Where(oh => oh.userGroupName.Equals(userCur.UserGroupName))
.OrderBy(x => x.lastName);
将UserGroups
用ID而不是名称进行比较实际上会更好。
答案 2 :(得分:0)
您可以跳过加入,因此具有多个组的用户不会出现两次。我假设组没有导航属性,但是如果有,你可以使用ur.UserGroups而不需要let
定义。
var EmpRecList = (from ur in db.Users
let groups = db.UserGroups.Where(ug => ur.UserGroupID == ug.UserGroupID)
select new
{
lastName = ur.LastName,
userID = ur.UserID,
firstName = ur.FirstName,
userGroupNames = groups.Select(g => g.UserGroupNameLang1)
}).Where(oh => oh.userGroupNames.Any(n => n.StartsWith(userCur.UserGroupName)))
.OrderBy(x => x.lastName);