C# 将SQL查询转换为LINQ#2
我的数据库包括两个表:User(idUser,firstName,lastName)和 文档(idDoc、标题、过期日期、UserDoc)其中UserDoc是idUser的外键 此外,我的C代码中有两个类: 及 我需要转换以下查询: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
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();