2013-03-15 16 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;