标签: linq-to-objects

如何在 linq 查询中实例化对象

这是一个理论上的问题,我正在查看其他人的代码(如下),我的简单解决方案是在 linq 之外实例化集合,但我猜在某些情况下我想实例化查询中的对象,并且也许仅在选择的元素上。这是一个简化的例子,说明这是如何完成的(糟糕)。

var pods = (from n in ids
where new Node(Convert.ToInt32(n)).HasValue("propertyName") 
select new
{
    Id = Convert.ToInt32(n),
    Url = new Node(Convert.ToInt32(n)).Url,
    Name = new Node(Convert.ToInt32(n)).Title()
}).ToList();
Run Code Online (Sandbox Code Playgroud)

无关注意:在这种情况下,Node 构造函数正在从内存缓存中获取数据。

如何改进此示例以仅使用 linq 实例化每个对象一次?

干杯。默里。

linq linq-to-objects instantiation

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

Linq,在var,list,IEnumerable和IQueryable中返回数据有什么区别?

我是Linq的新手请指导我一些基本的事情.

在阅读Linq的一些文章.一些authers从Linq查询中填充var中的数据,一些填充自定义类型对象的列表,一些填充IEnumerable中的数据,一些填充IQuryable中的数据.我无法得到这些4中的不同之处以及应该在哪种情况下使用哪一个.

我想使用Linq to SQL.我该怎么用?

linq linq-to-objects linq-to-entities linq-to-xml linq-to-sql

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

获取符合条件的第一项或返回第一项

我想获得满足给定条件的第一个项目,如果没有一个项目符合该条件,我只想获得第一个项目

这就是我目前所做的和有效的,但我不喜欢它。在一个 LINQ 查询中是否有更优雅的方法来做同样的事情?

LookupLine lookup;
Func<KeyValuePair<int,LookupLine>,bool> criteria = 
    (kv) => !kv.Value.Gruppe.StartsWith("SF");

if (lookupLines.Any(criteria))
{
    lookup = lookupLines.First(criteria).Value;
}
else if (lookupLines.Any())
{
    lookup = lookupLines.First().Value;
}

FirstRelevantGroup = lookup.Gruppe;
Run Code Online (Sandbox Code Playgroud)

c# linq-to-objects

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

LINQ语句的Where子句用于查找List <string>集合中的字符串实例?

我正在尝试为Linq语句构造一个Where子句,该子句需要确定集合中是否存在如下检索的AccountNumberList<string>.

我到目前为止试过这个:

private void FindAccountNumbers(List<string> AccountNumbers)
{
    var query = from abc 
    select new
    {
        AccountNumber = abc.AccountNumber
    };

    query = query.Where(AccountNumbers.Contains(x => x.AccountNumber));
}
Run Code Online (Sandbox Code Playgroud)

但是我收到以下构建错误:

无法从用法中推断出方法'System.Linq.Queryable.Where(System.Linq.IQueryable,System.Linq.Expressions.Expression>)'的类型参数.尝试显式指定类型参数.

在运行时,query包含AccountNumber值,我试图根据AccountNumbers集合中找到的匹配(类似于TSQL中的IN语句)来减少它.我应该使用Intersect而不是Contains?我究竟做错了什么??

c# linq linq-to-objects

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

需要帮助解决我遇到的Linq-to-Objects查询遇到的性能问题?

我有77个SPListItem对象的集合.这些对象可以对其他对象具有隐含的递归引用*.此层次结构中目前有4个级别.

我遇到的问题是,当我获得层次结构中较深的项目时,检索它们需要花费很长时间.我在每个级别看到的时间:

zeroth: nearly instant
first: 2 seconds
second: 20 seconds
third: goes for about a minute and then times out
Run Code Online (Sandbox Code Playgroud)

这是SPListItem对象中字段的结构:

ID
Title
ParentId //recursive field
Run Code Online (Sandbox Code Playgroud)

这是我用来获取每个级别的SPListInformation的代码:

SPList navList = SPContext.Current.Web.Lists["NavStructure"];

//Get items that have no parent
var zero = from n in navList.Items.Cast<SPListItem>()                                                 
           where ((SPFieldLookupValueCollection)n["Parent"]).Count == 0                               
           select new { ID = n.ID, Title = n.Title };

//Get first level items
var first = from n in navList.Items.Cast<SPListItem>()
            from z in zero
               where ((SPFieldLookupValueCollection)n["Parent"]).Select(t => t.LookupId).Contains(z.ID)
            select new …
Run Code Online (Sandbox Code Playgroud)

.net c# linq performance linq-to-objects

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

LinqToObjects中的Regex和Like运算符

为了避免混淆,我正在谈论linq对象而不是别的.我正在处理内存中的大量对象,我需要过滤它们.我们有一个包含许多选项的屏幕,用户可以选择多个值.

我需要在sql中实现类似于"Like"运算符的东西.我确实在这个网站上找到了一篇关于它的帖子并使用了正则表达式,但我从未使用它.我想知道我的字符串模式是否正确.不应该使用"%""%"?

我还读过你应该使用startWith -endWith和contains的组合,但是我没有找到任何使用它们的所有组合的例子,只是为了感觉如何去做.

我这样做

string pattern = string.Format(".*{0}.*", criteria.SearchText);
myList= myList.Where(x => x.Message.Like(pattern)).ToList();

public static bool Like(this string s, string pattern, RegexOptions options = RegexOptions.IgnoreCase)
{
    return Regex.IsMatch(s, pattern, options);
}
Run Code Online (Sandbox Code Playgroud)

有什么建议

c# regex linq-to-objects

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

如何在VB.NET中使用LINQ按列值查找DataTable行

您好我在运行时创建了一个Dynamic DataTable.安装程序就是这样

Id |  Name  | Age
-----------------
3  |  Mike  | 21
6  |  John  | 43
8  |  Sara  | 34
Run Code Online (Sandbox Code Playgroud)

我想要做的是提出一个我可以用来查找和更新特定行的linq语句.

例如将AGE更改为'33'的语句WHERE ID ='3'

我的代码到目前为止:

-[VB.NET]-
Dim MyRow As DataRow = From column In MyTable.Rows Where column("Id") = 3
MyRow(0)("Age") = 33
Run Code Online (Sandbox Code Playgroud)

但这不是更新我的DataTable条目.任何帮助,将不胜感激.谢谢.

linq vb.net datatable linq-to-objects datarow

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

获取嵌套在列表中的最大计数列表

我有一个员工列表,所有员工都有另一个嵌套列表,称为DisplayList.

现在并非所有员工都拥有相同数量的DisplayField.所以我希望得到具有最高DisplayFields的那些,以便我可以将每个人都包含在显示器中.

目前我有以下内容: -

            int iMaxDisplayCount = 0;
        foreach (Employee employee in employeeList)
        {
            int iDisplayCount = employee.EmployeeDisplayCollection.Count;
            if (iDisplayCount > iMaxDisplayCount)
                iMaxDisplayCount = iDisplayCount;
        }

        var employees = employeeList.GroupBy(p => p.EmployeeDisplayCollection.Count == iMaxDisplayCount).Select(g => g.ToList());  
        foreach(var employeeHighList in employees)
        {
            foreach (var employee in employeeHighList) 
            {         

            }         
        } 
Run Code Online (Sandbox Code Playgroud)

但是出于某种原因,我得到了employeeHighList中的所有员工,而不仅仅是拥有最高显示数量的员工.

我认为GroupBy不正确,但不知道它有什么问题.

任何帮助将非常感谢!

谢谢

c# linq linq-to-objects c#-4.0

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

按匿名类型的字段排序

我正在使用LINQ to Objects聚合:

  var summary = from esc in objs
                where esc.time.Month == month && esc.time.Year == year
                group esc by esc.rlf_id into g
                select new { 
                  ID = g.Key, 
                  Total = g.Count(), 
                  Preventable = g.Where(a => a.preventable).Count() 
                };
Run Code Online (Sandbox Code Playgroud)

我的查询按预期工作,但我也想按匿名类型中的任意字段对查询进行排序.我找到了LINQ:按匿名类型排序,但是它在VB.NET中并且需要强烈指定要排序的字段.我可以用这个伪代码概念化我想要的东西:

query = get all esc in obj
        aggregate into anonymous type with key ID
          ID = g.Key, Total = g.Count, Preventable = g.Count of preventable
        orderby inputField[0], (optional thenby inputField[1], ..., thenby inputField[n])
Run Code Online (Sandbox Code Playgroud)

我如何完成:

  • 按LINQ查询中的匿名类型字段排序 (完成 - 谢谢Marko!) …

c# linq linq-to-objects c#-3.0

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

使用 Linq 对象,如何根据同一列表中的另一个字段获取一个字段的值

我有一个定义如下的类:

public class MyClass
{
    public int ID { get; set; }
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个逻辑,我可以在其中构建该类的列表:

MyList = new List<MyClass>;
foreach(MyClassData myClass in Service.MyClassList)
{
    MyList.Add(new MyClass{ID = myClass.ID, Name = myClass.Name});
}
Run Code Online (Sandbox Code Playgroud)

现在,我需要根据“名称”获取“ID”。

我正在尝试以下操作:

int id01 = MyList.Where(x => x.FileName.Equals("File01")).Single(x => x.FileID)
Run Code Online (Sandbox Code Playgroud)

这样做我收到一条错误消息:

无法将类型“int”隐式转换为“bool”

我将如何使用 LINQ 做到这一点?

c# linq linq-to-objects

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