如何避免在linq中加载特定列

时间:2017-11-03 12:27:51

标签: c# asp.net-mvc linq-to-sql

在Linq-to-SQL中,可以使用ToList方法从实体对象获取所有数据:

db.users.Tolist();

也可以通过select方法获取多列:

var users= db.users.Select(
                t => new
                {
                    t.c1,
                    t.c2,
                    t.c3,
                    .
                    .
                });

但是我希望得到所有列没有这样的特定列:

db.users.exclude(t.c2).tolist();

有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:2)

  

要做动态crud操作,但[jqgrid]不能使用导航属性和延迟加载,我想避免在后端Cod中加载导航属性

在查询之前添加db.Configuration.LazyLoadingEnabled = false;

db.Configuration.LazyLoadingEnabled = false;
db.users.Tolist();

如果有 要加载的集合,则必须使用Include

db.Configuration.LazyLoadingEnabled = false;
db.users.Incude(x => x.Roles).Tolist();

OR

如果您使用json.net(标准包含库)返回,请将JsonIgnore添加到您不希望序列化到客户端的属性中。例如:

public class User {
  [JsonIgnore]
  public ICollection UsersRoles {get;set;}
}

答案 1 :(得分:0)

你为什么要向后走?

只需选择您想要的列,不要选择您不想要的列

而不是全部选择它们而不包括你不想要的那样:

var users= db.users.Select(
                t => new
                {
                    t.c1,
                    t.c2,
                    t.c3,
                    .
                    .
                    .

                });

改为:

var users= from u in db.users

        select u.c1, u.c3, etc... ;  //Dont select what you don't want

或者这个也可以:

var users = from u in db.users

                select new 
                {
                    c1 = u.c1, 
                    c3 = u.c3
                }.ToList();