2012-11-08 19 views
1
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有一個獨特的記錄。謝謝。嘗試使用不同的方法,但沒有成功。如何通過LINQ獲取唯一記錄

+0

此用戶可能有兩個用戶組? –

+2

如果他們不是真正獨特的,你如何確定你想要哪一個? – Hardrada

+0

但是下面的用戶不是多個組? – davenewza

回答

1

您可以使用GroupBy並獲取第一條記錄。在訂購後,它將根據用戶標識符獲取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) 
+0

這裏的問題是結果會根據數據的順序而變化。它會產生不一致的結果。 – davenewza

+0

啊,對不起,我錯過了。 – davenewza

+0

thx爲groupBy的想法,並選擇第一條記錄... – JYR

0

的這裏的問題是,你wan't的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而不是名稱。

+0

我需要啓動,因爲它是SQL中的「LIKE」相同的功能 – JYR

+0

但是,那麼你會得到重複! – davenewza

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);