2013-03-15 52 views
1

我必須從數據表中獲取兩個字段。然後我應該檢查一個。 「listIDStr」保留非唯一的userID列表。所以我必須使用「的ID是當我更新行的主鍵。linq轉換爲多個字段

List<string> listIDStr = new List<string>(); 
... 
var sqlData = SqlDataBase.SqlGetTable("SELECT ID,UserID FROM TBL_UserT WHERE SID = " + 4663 + " AND UserID = '" + UserID + "'") 
          .AsEnumerable() 
          .ToList() 
          .ConvertAll(x=>x.Field<string>("UserID")) 
          .ToList(); 

List<string> Cikan = sqlData.Where(x => !listIDStr.Contains(x)).ToList(); 
List<string> Eklenen = listIDStr.Where(x => !sqlData.Contains(x)).ToList(); 

上面的代碼運行的一個field.But我想‘’連同‘用戶名’的ID。有沒有人有一個好主意,它是如何呢?

+0

對不起,這裏是題外話問題,但我是一個好奇的人。 你如何訪問'SqlDataBase.SqlGetTable();'?它是一個自定義類嗎?我嘗試粘貼它無濟於事。再次爲OT遺憾:) – mackwerk 2013-03-15 09:58:10

+0

是SqlDataBase是一個類,SqlGetTable是一個函數。 :) – RockOnGom 2013-03-15 10:19:44

+0

這是一個自定義類嗎?我無法打電話來自我的VWD2010 – mackwerk 2013-03-15 10:48:38

回答

7

使用匿名類型,here is the MSDN link

var dtEnumerable = SqlDataBase.SqlGetTable("SELECT ID,UserID FROM TBL_UserT WHERE SID = " + 4663 + " AND UserID = '" + UserID + "'").AsEnumerable().ToList(); 

var newVariable = dtEnumerable.Select(x => new { UserID = x.Field<string>("UserID"), ID = x.Field<string>("ID") }); 
//Get new/old 
var states = newVariable.Select(x => new { IsNew = !listIDStr.Contains(x.UserId), IsUpdate = listIDSTr.Contains(x.UserID), ID = x.UserID }); 
var updates = states.Where(x => x.IsUpdate).Select(x => x.UserID); 
var newIds = states.Where(x => x.IsNew).Select(x => x.UserID); 
//We now have access to both! 
string firstUserID = newVariable.First().UserID; 
string firstID = newVariable.First().ID; 
+0

謝謝你的回答。我還沒有嘗試。因爲我不能寫「Cikan」和「Eklenen」。你能寫「Cikan」和「Eklenen」嗎? – RockOnGom 2013-03-15 09:14:40

+0

@zeitgeist你現在只需要一個'List '由於這個組合?我不明白這些變量名稱,所以你可能必須解釋你想要什麼 – LukeHennerley 2013-03-15 09:18:55

+0

「Cikan」是外向用戶。 「Eklenen」是新用戶。所以我學習這個「用戶是新的?」或「用戶是外向的?」。 – RockOnGom 2013-03-15 09:27:20

0

基本上你想「項目」的數據回來到不同類型的對象,甚至是匿名的,如果你」不打算將它傳遞給方法外

匿名對象

var user = SqlDataBase.SqlGetTable("select Id, Name from User where ...") 
         .AsEnumerable() 
         .ToList() 
         .Select(x => new { x.Id, x.Name }) 
         .SingleOrDefault(); 

int userId = user.Id; 
string username = user.Name; 

強類型對象

var user = SqlDataBase.SqlGetTable("select Id, Name from User where ...") 
         .AsEnumerable() 
         .ToList() 
         .Select(x => new UserViewModel { Id = x.Id, Name = x.Name }) 
         .SingleOrDefault(); 

int userId = user.Id; 
string username = user.Name;