2014-10-28 138 views
1

我有以下方法:LINQ到SQL多表查询

public List<object> GetLoginValues(String user, String pass) 
{ 
    using (db = new DCDataContext()) 
    { 
     List<object> x = (from u in db.users 
         join t in db.userTypes on u.type equals t.typeID 
         where u.loginName == user && 
         u.password == pass && 
         u.isActive == true 
         select new 
         { 
          u.userID, 
          u.loginName, 
          u.userCode, 
          u.type, 
          u.team, 
          t.typeName 
         }).ToList(); 
     return x; 
    } 
} 

这显然是行不通的。我需要这个方法来返回这个连接的结果。优选为List。我想知道是否可以在不需要为包含两个表的属性的类创建一个类,因为我使用的是linq-to-sql,并且每个表都已经有类。

为了使这个查询/方法正常工作,我应该返回什么类型?

+0

我刚刚更新了我的回答做这项工作? – RajeshKdev 2014-10-28 10:35:48

回答

0

以下方法会将连接的结果返回到列表中。

您需要通过加入来指定要在两个表中使用的列。您必须指定列(属性),因为连接不知道需要选择哪个列。而且它的良好做法。选择所需的列而不是选择所有列属性。

public dynamic GetLoginValues(String user, String pass) 
{ 
    using (db = new DCDataContext()) 
    { 
     var x = (from u in db.users 
       join t in db.userTypes on u.type equals t.typeID 
       where u.loginName == user && 
       u.password == pass && 
       u.isActive == true 
       select new 
        { 
         u.userID, 
         u.loginName, 
         u.userCode, 
         u.type, 
         u.team, 
         t.typeName 
        }).ToList(); 
     return x; //returns the list of values 
    } 
} 

是的,如果你不想使用自定义类,那么上述代码将不需要创建额外的自定义类。

调用方法象下面这样:

YourClassName dbObj = new YourClassName(); 
var loginDetailsList = dbObj.GetLoginValues("RJK", "123456");