标签: linq-to-sql

实体框架/ Linq to SQL:Skip&Take

只是好奇Skip&Take应该如何工作.我得到了我想在客户端看到的结果,但是当我连接AnjLab SQL Profiler并查看正在执行的SQL时,它看起来好像在查询并将整个行集返回到客户.

是否真的返回所有行,然后在客户端使用LINQ对事物进行排序和缩小?

我尝试过使用Entity Framework和Linq to SQL; 两者似乎都有相同的行为.

不确定它有什么不同,但我在VWD 2010中使用C#.

任何见解?

public IEnumerable<Store> ListStores(Func<Store, string> sort, bool desc, int page, int pageSize, out int totalRecords)
{
    var context = new TectonicEntities();
    totalRecords = context.Stores.Count();
    int skipRows = (page - 1) * pageSize;
    if (desc)
        return context.Stores.OrderByDescending(sort).Skip(skipRows).Take(pageSize).ToList();
    return context.Stores.OrderBy(sort).Skip(skipRows).Take(pageSize).ToList();
}
Run Code Online (Sandbox Code Playgroud)

结果SQL(注意:我排除了Count查询):

SELECT 
[Extent1].[ID] AS [ID], 
[Extent1].[Name] AS [Name], 
[Extent1].[LegalName] AS [LegalName], 
[Extent1].[YearEstablished] AS [YearEstablished], 
[Extent1].[DiskPath] AS [DiskPath], 
[Extent1].[URL] AS [URL], 
[Extent1].[SecureURL] AS [SecureURL], 
[Extent1].[UseSSL] AS [UseSSL]
FROM [dbo].[tec_Stores] AS [Extent1] …
Run Code Online (Sandbox Code Playgroud)

.net c# sql-server-2008 linq-to-sql entity-framework-4

43
推荐指数
2
解决办法
7万
查看次数

如何从Linq 2 SQL迁移到Linq 2实体?

我想为那些想要从linq2sql迁移到linq2entities和ADO.net Entity Framework(在这里称为L2E)的人们开始参考.我不想讨论哪两个更好.我只是想为那些想要从一个过渡到另一个的人创建这两者之间的差异列表.

基本的东西很简单:删除linq2sql数据类,添加ado.net模型(从数据库创建).将"实体"重命名为以前的datacontext名称.


现在,差异.例如,要在L2S中保留(保存)更改,我会使用:

using (MyDataClassesDataContext mydc = new MyDataClassesDataContext())
{
  // change data
  mydc.SubmitChanges();
}
Run Code Online (Sandbox Code Playgroud)

在L2E中,这必须改为:

using (MyDataClassesDataContext mydc = new MyDataClassesDataContext())
{
  // change data
  mydc.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)


第二个例子,你使用的L2S中插入一条新记录:

using (MyDataClassesDataContext mydc = new MyDataClassesDataContext())
{
  MyTable myRow = new MyTable();
  mydc.MyTable.InsertOnSubmit(myRow);
  mydc.SubmitChanges();
}
Run Code Online (Sandbox Code Playgroud)

在L2E中,这必须改为:

using (MyDataClassesDataContext mydc = new MyDataClassesDataContext())
{
  MyTable myRow = new MyTable(); // or = MyTable.CreateMyTable(...);
  mydc.AddToMyTable(myRow);
  mydc.SaveChanges();
}    
Run Code Online (Sandbox Code Playgroud)


对于其他代码片段,我将跳过using(...)部分和SubmitChanges/SaveChanges,因为它每次都是相同的.
要将更改的对象附加到L2S中的datacontext/model(使用时间戳):

mydc.MyTable.Attach(myRow);
Run Code Online (Sandbox Code Playgroud)

在L2E中:

// you …
Run Code Online (Sandbox Code Playgroud)

.net linq-to-entities linq-to-sql

42
推荐指数
1
解决办法
3794
查看次数

LINQ to SQL - 如何选择特定列并返回强类型列表

我正在尝试使用LINQ to SQL从表中选择一些特定的列,并将结果作为强类型的对象列表返回.

例如:

var result = (from a in DataContext.Persons
                              where a.Age > 18
                              select new Person
                              {
                                  Name = a.Name,
                                  Age = a.Age
                              }
                              ).ToList();
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

它构建良好,但是当我运行它时,我得到了错误.MyEntity不允许在查询中显式构造实体类型.

asp.net linq-to-sql

41
推荐指数
1
解决办法
15万
查看次数

通过动态LINQ可以注入吗?

使用Dynamic LINQ库(链接),是否容易受到注入?和(如果是的话)如何防止这种情况?

安全注意事项(实体框架)的一些背景知识:

LINQ to Entities注入攻击:

尽管在LINQ to Entities中可以进行查询组合,但它是通过对象模型API执行的.与实体SQL查询不同,LINQ to Entities查询不是使用字符串操作或连接组成的,并且它们不易受传统SQL注入攻击的影响.

由于动态SQL是使用字符串组成的,这意味着它可能容易受到注入向量的影响吗?或者LINQ to SQL会根据Dynamic LINQ库中的基础数据类型自动处理参数化值吗?

或者它是完全安全的,因为动态查询将在内存中执行而不是在SQL上执行(从而否定SQL索引的任何好处)?

我一直在努力理解DynamicLibrary.cs代码,但我确信我可以很容易地忽略一些东西.

由于这个问题是关于动态LINQ库本身,这个问题可以被认为适用于两者linq-to-sqllinq-to-entities(尽管上面引用了实体框架).

c# linq linq-to-entities dynamic-linq linq-to-sql

41
推荐指数
1
解决办法
1万
查看次数

将Linq中的可空类型与Sql进行比较

我有一个Category实体,它有一个Nullable ParentId字段.当下面的方法正在执行且categoryId为null时,结果似乎为null,但是有些类具有null ParentId值.

这里有什么问题,我错过了什么?

public IEnumerable<ICategory> GetSubCategories(long? categoryId)
{
    var subCategories = this.Repository.Categories.Where(c => c.ParentId == categoryId)
        .ToList().Cast<ICategory>();

    return subCategories;
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,当我将条件更改为(c.ParentId == null)时,结果似乎正常.

c# nullable linq-to-sql

40
推荐指数
4
解决办法
5万
查看次数

EntitySet - 是否有一个理所当然的IList.Add没有设置分配?

向大多数列表添加项目有3种方法...

  • 通常通过直接的公共API方法 Add(SomeType)
  • 通过通用IList<T>.Add(T)接口
  • 通过非通用IList.Add(object)接口方法

你通常期望他们的行为或多或少相同.然而,LINQ EntitySet<T>是......在3.5和4.0上都很奇怪; 该IListAPI 不会标志设定为"分配" -其他两种机制 -这听起来微不足道,但它是因为它极大地影响系列化重要(即导致其跳过)的样板代码.

例:

EntitySet<string> set1 = new EntitySet<string>();
set1.Add("abc");
Debug.Assert(set1.Count == 1); // pass
Debug.Assert(set1.HasLoadedOrAssignedValues, "direct"); // pass

EntitySet<string> set2 = new EntitySet<string>();
IList<string> typedList = set2;
typedList.Add("abc");
Debug.Assert(set2.Count == 1); // pass
Debug.Assert(set2.HasLoadedOrAssignedValues, "typed list"); // pass

EntitySet<string> set3 = new EntitySet<string>();
IList untypedList = set3;
untypedList.Add("abc");
Debug.Assert(set3.Count == 1); // pass
Debug.Assert(set3.HasLoadedOrAssignedValues, "untyped list"); // FAIL
Run Code Online (Sandbox Code Playgroud)

现在......这让我感到非常惊讶; 以至于我花了2个多小时跟踪代码以隔离发生的事情.所以... …

.net c# linq entityset linq-to-sql

40
推荐指数
2
解决办法
3188
查看次数

Last和LastOrDefault不受支持

我试图获取列表中的第一个值和最后一个值.查询经营者First()的支持,但Last()LastOrDefault()给出错误.我是否Last()以错误的方式使用操作员?

   var purchaseBills = db.PurchaseBills.OrderBy(p => p.BillID);

   if (purchaseBills.Count() >0)
   {
       var firstBill= purchaseBills.First(); //This is supported

       //Attempt 1                    
       var lastBill = purchaseBills.Last(); // Not supported

       //Attempt 2
       var lastBill = purchaseBills.LastOrDefault(); //Not supported

       //Attempt 3
       var lastBill = purchaseBills.Reverse().First(); //Not supported

       textBoxPurchaseBillFrom.Text = firstBill.BillNo.ToString();
       textBoxPurchaseBillTo.Text = lastBill.BillNo.ToString();
   }
Run Code Online (Sandbox Code Playgroud)

更新: - 错误 -

尝试1:不支持查询运算符"Last".

尝试2:不支持查询运算符"LastOrDefault".

尝试3:不支持查询运算符"反向".

.net c# linq linq-to-sql

40
推荐指数
5
解决办法
5万
查看次数

如果在LINQ中有其他

是否可以在LINQ查询中使用If Else条件?

就像是

from p in db.products
if p.price>0
select new
{
  Owner=from q in db.Users
        select q.Name
}
else
select new
{
   Owner = from r in db.ExternalUsers
            select r.Name
}
Run Code Online (Sandbox Code Playgroud)

c# linq linq-to-sql

39
推荐指数
2
解决办法
12万
查看次数

在LINQ中组合多个表

我有一个非常简单的SQL查询

SELECT r.SpaceID, Count (*), SpaceCode 
FROM Rider r JOIN Spaces s 
ON r.SpaceID = s.SpaceID
GROUP BY r.SpaceID, s.SpaceCode 
Run Code Online (Sandbox Code Playgroud)

请注意我的group by子句在多个表上,我想在linq中做同样的事情,我知道如何对单个表进行分组,但是关于多个表我不知道.

c# sql linq linq-to-sql

39
推荐指数
2
解决办法
4万
查看次数

从LINQ到SQL获取SQL查询?

我有一个查询,我byte[]作为参数传递.我试图从中获取SQL查询并在管理工作室中运行该查询以进行调试.如何从中提取SQL语句?

 committeeMember =
           db.Committee_Member.FirstOrDefault(x => x.Customer_Number == activity.Contact.Number
           && x.Position_Start_Date.Value.Year == activity.EndDate
           && x.Committee_Id == activity.Committee.Id && x.Cancelled != 1);
Run Code Online (Sandbox Code Playgroud)

.net c# linq-to-sql

39
推荐指数
2
解决办法
7万
查看次数