这是一个理论上的问题,我正在查看其他人的代码(如下),我的简单解决方案是在 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的一些文章.一些authers从Linq查询中填充var中的数据,一些填充自定义类型对象的列表,一些填充IEnumerable中的数据,一些填充IQuryable中的数据.我无法得到这些4中的不同之处以及应该在哪种情况下使用哪一个.
我想使用Linq to SQL.我该怎么用?
linq linq-to-objects linq-to-entities linq-to-xml linq-to-sql
我想获得满足给定条件的第一个项目,如果没有一个项目符合该条件,我只想获得第一个项目
这就是我目前所做的和有效的,但我不喜欢它。在一个 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) 我正在尝试为Linq语句构造一个Where子句,该子句需要确定集合中是否存在如下检索的AccountNumber值List<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?我究竟做错了什么??
我有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) 为了避免混淆,我正在谈论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)
有什么建议
您好我在运行时创建了一个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条目.任何帮助,将不胜感激.谢谢.
我有一个员工列表,所有员工都有另一个嵌套列表,称为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不正确,但不知道它有什么问题.
任何帮助将非常感谢!
谢谢
我正在使用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)
我如何完成:
我有一个定义如下的类:
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 做到这一点?
linq-to-objects ×10
linq ×8
c# ×7
.net ×1
c#-3.0 ×1
c#-4.0 ×1
datarow ×1
datatable ×1
linq-to-sql ×1
linq-to-xml ×1
performance ×1
regex ×1
vb.net ×1