【问题标题】:How to use LINQ to query matching items to a list?如何使用 LINQ 将匹配项查询到列表中?
【发布时间】:2016-01-28 17:42:44
【问题描述】:

如果我使用类似的东西,我想查询列表中匹配某些值的项目,

var someList = someDbContext.Items.ToList();

var fullList = (from item in someList
                where item.Name == data.Name 
                & item.Job == data.Job
                select item).ToList();

someList 包含姓名和工作,例如,

  • 约翰,技术员
  • Rachel,系统管理员
  • Frank,IT 支持

现在如果 John, Technician 初始化如下:

data.Name = "John";
data.Job = "Technician";

这应该将此项目添加到列表中吗?但是,由于某种原因,它们不是,而当我这样做时,

var total = fullList.Count;

total 等于 0。

我错过了什么吗?为什么没有将技术员约翰添加到列表中?

这里是更具体的编码示例,

 Data data = new Data();
 Models.DataModel someDBContext = new Models.DataModel();

 data.Name = "John";
 data.Job = "Technician";

 var someList = someDbContext.Items.ToList();

 var fullList = (from item in someList
                    where item.Name == data.Name 
                    & item.Job == data.Job
                    select item).ToList();

【问题讨论】:

  • 问题似乎有点不清楚。请考虑改写它,并注意提供示例,供人们在尝试解决问题时自行编译和测试。
  • 这些字段的类型是什么?字符串?我们可以得到对象定义吗?
  • 您应该使用&& 而不是&。第一个是逻辑与运算符。其次是位运算符
  • 类型是字符串。
  • @SergeyBerezovskiy 错了。您也可以将 &bool 值一起使用。 &&&bool 上使用时的区别在于后者会短路。

标签: c# sql linq list


【解决方案1】:

数据似乎只是一个本地对象。您仍然需要将其添加到您的数据源中。可能喜欢:

someDbContext.Items.Add(data)

【讨论】:

  • 我正在从数据库中生成一个列表,为什么我需要将数据添加到数据源中已有的数据中?
【解决方案2】:
Data data = new Data();
Models.DataModel someDBContext = new Models.DataModel();

data.Name = "John";
data.Job = "Technician";

someDbContext.Items.Add(data);
someDbContext.SaveChanges();   

var fullList = (from item in someDbContext.Items
                    where item.Name == data.Name 
                    && item.Job == data.Job
                    select item).ToList();

【讨论】:

    【解决方案3】:

    试试这个。希望是因为缺少“&&”

    var someList = someDbContext.Items.ToList();    
    var fullList = (from item in someList
                    where item.Name == data.Name 
                    && item.Job == data.Job
                    select item).ToList();
    

    如果someList 有任何值,那么fullList 将包含一个值。查看this示例代码。

    【讨论】:

    • 奇怪的是,虽然它与 && 一起运行,但列表中仍然没有任何内容,所以仍然无法正常工作。
    • & 更改为&& 绝对不会对结果产生影响;它只会节省一些不必要的比较。
    • @JDavila: somelist 有什么价值吗?
    • 是的,在这种情况下someList 中有值。
    【解决方案4】:

    我能够通过以下方式解决场景:

    Data data = new Data();
    Models.DataModel someDBContext = new Models.DataModel();
    
    data.Name = "John";
    data.Job = "Technician";
    
    var fullList = from item in someDbContext.Items
                        select item;
    
    foreach (var item in fullList){
           if(item.Name.Trim() == data.Name && item.Job == data.Job)
              {
               someDBContext.Items.Add(item);
              }
    }
    someDbContext.SaveChanges();
    

    无论出于何种原因,当使用 LINQ 查询创建列表时,项目将无法使用条件匹配,fullList 必须使用查询创建,然后使用 dbcontext 单独访问。

    【讨论】:

      猜你喜欢
      • 2013-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-13
      • 1970-01-01
      • 2012-11-07
      相关资源
      最近更新 更多