我正在尝试使用BA.dbml文件(Linq to Sql)创建数据库.我知道我必须创建DataContext和创建数据库.但我不知道该怎么做.我是否必须DataContext在BA.cs文件中创建.
这可能是多余的帖子,我很抱歉.
我有点不知道为什么我的MVC应用程序中的一个ASP视图运行得如此之慢.
我在控制器中使用linq选择一些数据.这很快就会运行:
public ActionResult Progress(int ID)
{
var reviewitems = from ri in db.ReviewItems
where ri.Enrolment.Course.LearningArea.LearningAreaID == ID && ri.Review.ReviewSeries.StartDate < DateTime.Now && ri.Review.ReviewSeries.EndDate > DateTime.Now && ri.Progress < 2
select ri;
return View("Progress", reviewitems);
}
Run Code Online (Sandbox Code Playgroud)
然后我在ASP视图中执行foreach循环,遍历已经传递给视图的'reviewitem'类型的数据的每一行.这很快:
<%foreach (var ri in Model)
{ %>
<tr>
<td><%= ri.Progress %></td>
</tr>
<%} %>
Run Code Online (Sandbox Code Playgroud)
我需要显示更多信息,因此我需要加入"评论"表(再次提供快速结果),然后加入"学生"表.这就是问题所在,开始耗时超过30秒:
<%foreach (var ri in Model)
{ %>
<tr>
<td><%= ri.Review.Student.Surname %></td>
</tr>
<%} %>
Run Code Online (Sandbox Code Playgroud)
每个评论项目链接到一个独特的学生,所以我不明白为什么这么长时间.有没有人有任何想法,我应该开始寻找为什么它这么慢?据推测它与'Student'表(实际上是一个SQL Server视图)有关,但我可以使用SQL在一秒钟内从中选择所有行?
在代码审查期间,我向团队迅速提出了一种方法,我已经制定了静态方法,一个人同意没有理由不静态,一个人不同意说他不会让它静止,因为没有必要只是为了安全起见,以便将来进行修改和测试.
所以我做了很多研究,显然这是一个专门的案例,但我想知道在这种情况下你会做什么以及为什么?
(它基本上是一种帮助方法,我从一些不同的方法调用,一个非常低的流量页面.更多我的知识和静态学习.)
private IEnumerable<Category> GetCategoryByID(int id, Context context)
{
var categoryQuery = from selectAllProc in context.SelectAll_sp()
where selectAllProc.CategoryID == id
select selectAllProc;
return categoryQuery;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试在Linq中执行以下查询
SELECT *
FROM Table1 T1
INNER JOIN Table2 T2
ON T1.ID = T2.AnotherID
LEFT OUTER JOIN Table3 T3
on T1.ID = T3.AnotherID
Run Code Online (Sandbox Code Playgroud)
它在正确的SQL语法中按预期工作,但我很难将其转换为相应的Linq to SQL语法.
如何将左连接与内连接组合?
问候,
我在Linq有这个代码.任何人都可以提供t-sql.谢谢!
var tsr = from t in db.Tngs
from l in t.TngUsr
from td in t.TngDepts
from u in db.Users
where t.TId == tId && u.UserId == l.UserId && u.Departments.DeptId == td.Departments.DeptId
Run Code Online (Sandbox Code Playgroud)
是左外第二个/第三个?
我需要根据日期范围获取数据,如:
SELECT * FROM MyTable WHERE
myDate >= 'May 17 2012' AND
myDate <= 'May 17 2012'
Run Code Online (Sandbox Code Playgroud)
我在LINQ中编写了这个查询,问题是LINQ正在将此查询转换为:
SELECT * FROM MyTable WHERE
myDate >= 'May 17 2012 12:00:00:000AM' AND
myDate <= 'May 17 2012 12:00:00:000AM'
Run Code Online (Sandbox Code Playgroud)
问题是LINQ也在考虑时间部分,但我只需要搜索日期部分.
谁能帮我?
谢谢.
我怎么会扭转在LINQ到SQL查询中包含这样我可以检查Title或Description含有从我的列表中的任何字,是这样的:
var query = context.Shapes.Where(x => x.Title.Contains(words));
Run Code Online (Sandbox Code Playgroud)
这就是我现在所拥有的,但这与我的需要相反.
List<string> words = Search.GetTags(q);
//words = round,circle,square
using(ShapesDataContext context = new ShapesDataContext())
{
var query = context.Shapes.Where(x => words.Contains(x.Title) ||
words.Contains(x.Description));
}
// Item 1: Title = Elipse , Decsription = This is not round circle
//This should be a match! but words doesn't contain
//"This is not round circle", only round and circle so no match
Run Code Online (Sandbox Code Playgroud)
UPDATE
我现在有
var query = context.Shapes.Where(x => words.Any(w => x.Title.Contains(w) || …Run Code Online (Sandbox Code Playgroud) 有谁知道如何将此查询转换为LINQ to SQL?
SELECT posts.*, count(COMMENTS.*) AS comment_count FROM POSTS
LEFT JOIN COMMENTS on POSTS.id = COMMENTS.post_id
WHERE comments.date IS NULL OR comments.date >= [NOW]
GROUP BY posts.id
ORDER BY comment_count DESC
Run Code Online (Sandbox Code Playgroud)
它在SQL中很简单,但是我无法将我的头围绕linq包装到sql.任何帮助,将不胜感激!
谢谢
我有以下代码来更新用户列
public void UpdateLastModifiedDate(string username)
{
using (AppEntities db = new AppEntities())
{
var result = from u in db.Users where (u.UserName == username) select u;
if (result.Count() != 0)
{
var dbuser = result.First();
dbuser.LastModifiedDate = DateTime.Now;
db.SaveChanges();
}
}
}
Run Code Online (Sandbox Code Playgroud)
对于UpdateLastLogOutDate,UpdateLastLoginDate,我有其他两个函数几乎与上面的函数相同.所以,我决定为所有人定义单个函数来更新Last Date,如:
public void UpdateLastDate(string username, string ColumnName);
Run Code Online (Sandbox Code Playgroud)
在这里,我不能像这样放置ColumnName变量:
dbuser.ColumnName = DateTime.Now;
Run Code Online (Sandbox Code Playgroud)
有没有其他方法可以使用LINQ来做到这一点
我尝试将SQL删除命令更改为LINQ.这是我的SQL命令:
DELETE FROM [TrackPoints]
WHERE [RouteFK] IN (SELECT RouteId
FROM Routes
WHERE UserId = @UserId)
Run Code Online (Sandbox Code Playgroud)
这是我写的LINQ代码:
int UID =1;
FirstDataContext aspnetdb = new FirstDataContext();
var res1 = from q1 in aspnetdb.Routes
where q1.UserId == UID
select q1.RouteId;
foreach (var k in res1)
{
var eigen = from p in aspnetdb.Trackpoints
where p.RouteFK == k
select p.TrackPointId;
aspnetdb.Trackpoints.DeleteOnSubmit(eigen.First());
aspnetdb.SubmitChanges();
}
Run Code Online (Sandbox Code Playgroud)
但在这一行我有一个错误:
aspnetdb.Trackpoints.DeleteOnSubmit(eigen.First());
Run Code Online (Sandbox Code Playgroud)
那说:
'System.Data.Linq.Table.DeleteOnSubmit(LINQ_Test.Trackpoint)'的最佳重载方法匹配有一些无效的参数
我该怎么办?
linq-to-sql ×10
c# ×7
linq ×3
.net ×2
sql ×2
asp.net-mvc ×1
c#-4.0 ×1
comparison ×1
database ×1
date ×1
sql-server ×1
static ×1