C# 将SQL查询转换为LINQ#2

C# 将SQL查询转换为LINQ#2,c#,sql,linq,C#,Sql,Linq,我的数据库包括两个表:User(idUser,firstName,lastName)和 文档(idDoc、标题、过期日期、UserDoc)其中UserDoc是idUser的外键 此外,我的C代码中有两个类: 及 我需要转换以下查询: select a.*, (select u.lastName from Users as u where u.idUser = a.UserDoc),(select u.firstName from Users as u where u.idUser = a.Use

我的数据库包括两个表:User(idUser,firstName,lastName)文档(idDoc、标题、过期日期、UserDoc)其中UserDoc是idUser的外键

此外,我的C代码中有两个类:

我需要转换以下查询:

select a.*, (select u.lastName from Users as u where u.idUser = a.UserDoc),(select u.firstName from Users as u where u.idUser = a.UserDoc)
从文档作为
where getdate()因此您应该有如下内容:

var result = DocumentDAO.Where(d => d.expirationDate >= DateTime.Now).Select(d =>
                     new {
                       Document = d,
                       User = UserDAO.FirstOrDefault(u => u.idUser = d.UserDoc),
                       FirstName = User.firstName,
                       LastName = User.lastName,  
                     });
如果您使用EF作为ORM框架,并在实体之间配置了适当的关系,则您可能应该在
文档
中具有
用户
属性。在这种情况下,将更容易:

var result = context.Documents.Where(d => d.expirationDate >= DateTime.Now).Select(d =>
                         new {
                           Document = d,
                           FirstName = d.User.firstName,
                           LastName = d.User.lastName,  
                         });
更新

要返回
DocumentUI
列表,请将
Select()
语句替换为以下语句

.Select(d => new DocumentUI
                 {
                     Title = d.Title,
                     Description = d.Description,
                     DateOfAdd = d.DateOfAdd,
                     ExpirationDate = d.ExpirationDate,
                     UserDoc = d.UserDoc,
                     User = new UserUI { 
                                   FirstName = d.User.FirstName, 
                                   LastName = d.user.LastName
                               }
                 }).ToList(); 

你试过了吗??请告诉我们您遇到的错误。请看您的SQL查询有错误,请发布您真正的查询。我不太擅长这一点,这种情况下的上下文是什么?好的,但我是否会创建一个新的DocumentDAO而不是DocumentUI?正确,上面的代码使用
DocumentDAO
作为数据源,返回的值是一个匿名类型,您可以使用ok执行您希望执行的操作,但我需要返回List,是否有可能执行此操作?好的,还有一件事,User=new UserUI{FirstName=d.User.FirstName,LastName=d.User.LastName}在d.User.FirstName中,它没有看到Usersomething在这个上下文中不起作用(可能我搞错了,但我不知道在哪里)它是这样的:var result=DocumetDAO.DocumentUI.Where(d=>d.ExpirationDate>today)..?好的,我试过了,但是FirstName=d.User.FirstName,LastName=d.User.LastName有些问题,它在allok上看不到用户,但是我会创建一个新的DocumentDAO而不是DocumentUI吗?@Maggie Simple things看起来很复杂。请提供DAO实现。
            var documents = (from d in DocumentDAO.GetDocument()
                             from k in UserDAO.GetUsers().Where(k =>k.IdUser == d.UserDoc
                             where (DateTime.Now <= d.ExpirationDate)
                             select new DocumentUI
                             {
                                 Title = d.Title,
                                 Description = d.Description,
                                 DateOfAdd = d.DateOfAdd,
                                 ExpirationDate = d.ExpirationDate,
                                 UserDoc = d.UserDoc,
                                 User = new UserUI { FirstName = k.FirstName, LastName = k.LastName}

                             }).ToList();
            var documents = (from d in DocumentDAO.GetDocument()
                             from k in UserDAO.GetUsers()
                             where ((DateTime.Now <= d.ExpirationDate) && (k.IdUser == d.UserDoc))
                             select new DocumentUI
                             {
                                 Title = d.Title,
                                 Description = d.Description,
                                 DateOfAdd = d.DateOfAdd,
                                 ExpirationDate = d.ExpirationDate,
                                 UserDoc = d.UserDoc,
                                 User = new UserUI { FirstName = k.FirstName, LastName = k.LastName}

                             }).ToList();
 var now = DateTime.Now;
        var documents = DocumentDAO.GetDocument()
                    .Where(d => d.ExpirationDate > now)
                    .Select(d => new DocumentUI
             {
                 Title = d.Title,
                 Description = d.Description,
                 DateOfAdd = d.DateOfAdd,
                 ExpirationDate = d.ExpirationDate,
                 UserDoc = d.UserDoc,
                 User = new UserUI {
                     FirstName =UserDAO.GetUsers().First().FirstName,
                     LastName = UserDAO.GetUsers().First().LastName
                           }
             }).ToList(); 
var result = DocumentDAO.Where(d => d.expirationDate >= DateTime.Now).Select(d =>
                     new {
                       Document = d,
                       User = UserDAO.FirstOrDefault(u => u.idUser = d.UserDoc),
                       FirstName = User.firstName,
                       LastName = User.lastName,  
                     });
var result = context.Documents.Where(d => d.expirationDate >= DateTime.Now).Select(d =>
                         new {
                           Document = d,
                           FirstName = d.User.firstName,
                           LastName = d.User.lastName,  
                         });
vat now = DateTime.Now;
var result = DocumentDAO.GetDocument()
                        .Where(d => d.ExpirationDate > now)
                        .Select(d => new {
                                           doc = d,
                                           firstname = d.User.FirstName,
                                           lastname = d.User.LastName
                                       });
.Select(d => new DocumentUI
                 {
                     Title = d.Title,
                     Description = d.Description,
                     DateOfAdd = d.DateOfAdd,
                     ExpirationDate = d.ExpirationDate,
                     UserDoc = d.UserDoc,
                     User = new UserUI { 
                                   FirstName = d.User.FirstName, 
                                   LastName = d.user.LastName
                               }
                 }).ToList();