我需要获取x类型的表单上的所有控件.我很确定我曾经使用过这样的代码:
dim ctrls() as Control
ctrls = Me.Controls(GetType(TextBox))
Run Code Online (Sandbox Code Playgroud)
我知道我可以迭代所有控件让孩子们使用递归函数,但是有更简单或更直接的东西,可能如下所示?
Dim Ctrls = From ctrl In Me.Controls Where ctrl.GetType Is Textbox
Run Code Online (Sandbox Code Playgroud) 我看到这个代码使用LINQ to SQL,但是当我使用Entity Framework时,它会抛出此错误:
LINQ to Entities无法识别方法'System.Linq.IQueryable'1 [MyProject.Models.CommunityFeatures] GetCommunityFeatures()'方法,并且此方法无法转换为商店表达式.
存储库代码是这样的:
public IQueryable<Models.Estate> GetEstates()
{
return from e in entity.Estates
let AllCommFeat = GetCommunityFeatures()
let AllHomeFeat = GetHomeFeatures()
select new Models.Estate
{
EstateId = e.EstateId,
AllHomeFeatures = new LazyList<HomeFeatures>(AllHomeFeat),
AllCommunityFeatures = new LazyList<CommunityFeatures>(AllCommFeat)
};
}
public IQueryable<Models.CommunityFeatures> GetCommunityFeatures()
{
return from f in entity.CommunityFeatures
select new CommunityFeatures
{
Name = f.CommunityFeature1,
CommunityFeatureId = f.CommunityFeatureId
};
}
public IQueryable<Models.HomeFeatures> GetHomeFeatures()
{
return from f in entity.HomeFeatures
select new HomeFeatures()
{
Name = …Run Code Online (Sandbox Code Playgroud) 如果有时间使用标准linq关键字或linq扩展方法与lambda表达式,我正试图处理.他们似乎做同样的事情,只是写得不一样.这纯粹是风格问题吗?
var query = from p in Products
where p.Name.Contains("foo")
orderby c.Name
select p;
// or with extension methods:
var query = Products
.Where(p => p.Name.Contains("foo"))
.OrderBy(p => p.Name);
Run Code Online (Sandbox Code Playgroud)
他们非常相似,第二个例子更简洁,但如果你不知道=>在做什么,可能会表现得更差.
除了编写简洁的代码之外,使用扩展方法而不是LINQ语法还有其他优点吗?
我开始一般使用LINQ(到目前为止使用XML和toSQL).我已经看到有时候有两种或更多种方法可以达到相同的效果.拿这个简单的例子,据我所知,两者都返回完全相同的东西:
SomeDataContext dc = new SomeDataContext();
var queue = from q in dc.SomeTable
where q.SomeDate <= DateTime.Now && q.Locked != true
orderby (q.Priority, q.TimeCreated)
select q;
var queue2 = dc.SomeTable
.Where( q => q.SomeDate <= DateTime.Now && q.Locked != true )
.OrderBy(q => q.Priority)
.ThenBy(q => q.TimeCreated);
Run Code Online (Sandbox Code Playgroud)
除了我在语法中可能犯的任何错误或缺少参数或差异之外,我们的想法是有两种表达同一事物的方法; 我知道第一种方法有一些局限性,"点符号"更完整,但除此之外,还有其他优点吗?
我尝试了几种不同的方法,似乎无法使用vb.net得到我想要的结果.
我有一个字符串数组.{"55555","44444",""}
我需要一个整数数组{55555,44444}
这是一个将数组作为参数发送到晶体报告的wpf页面.
任何帮助表示赞赏.
出于好奇,再一次:
在VB.Net中编写了几个项目后,我惊讶地发现C#和VB.NET LINQ用法之间存在一些细微差别.例如,如果我们想要按多个属性(列)对元素进行分组,我们需要显式创建一个新的匿名类型:
var procs = from c in Process.GetProcesses()
group c by new {c.BasePriority, c.Id} into d
select d;
Run Code Online (Sandbox Code Playgroud)
而在VB.NET中,更直接的语法已经做到了:
Dim b = From c In Process.GetProcesses()
Group c By c.BasePriority, c.Id Into Group
Select Group
Run Code Online (Sandbox Code Playgroud)
因此,不需要在这里创建一个带有"new"的类型.
还有什么区别?C#和VB.NET中的LINQ语法有什么好的比较吗?
我的大部分服务器端体验都是使用nodeJS meteor或rails,所以我还没有丰富的.Net知识.在rails中它很容易选择ORM,因为ActiveRecord是城里唯一的游戏或者看起来如此.我的方法通常是使用ORM查询所有内容,如果你不能将它拉下来,那么请下拉到原始SQL.
但是,我正在尝试阅读有关在.Net 4.5或更新的应用程序中查询我的数据库的教程和课程,我对未来的方式感到困惑.我在下面看到教程
现代.net应用程序的建议ORM是什么?看起来我可以在上述所有方面做基本的CRUD操作.但是,一个人更适合说跨表加入吗?请注意,我只计划针对我的.net解决方案查询Microsoft SQL服务器数据库.
让我感到困惑的是阅读EF取代了linq然后阅读EF也使用了linq.因此,当我看到一个例子说选择所有列我不知道我是否使用过去或未来的语法.也只是看代码我不知道它的linq或EF.我可以告诉它的查询或lambda语法.
我决定第一次试用LINQ尝试解决这个问题.
我第一次涉足LINQ精彩世界的结果如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
List<string> list = new List<string>()
{
"fred-064528-NEEDED1",
"xxxx",
"frederic-84728957-NEEDED2",
"sam-028-NEEDED3",
"-----",
"another-test"
};
var result =
from s in list
where (from c in s where c == '-' select c).Count() == 2
select s.Substring(s.LastIndexOf("-") + 1);
foreach (string s in result)
Console.WriteLine(s);
Console.WriteLine("Press Enter");
Console.ReadLine();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道如何改进上述解决这个人为设计的小例子的方法.我对是否使用了最好的验证方法,或者我如何本地化"按Enter"或类似的东西不太感兴趣; 我只是想使用这个例子来学习更多关于LINQ的知识.
我还没有注意到这种行为,也许是因为我更喜欢VB.NET中的查询语法,并将查询和执行方法分成不同的语句.
如果我尝试编译以下简单查询:
Dim wordList As List(Of String) = New List(Of String)
Dim longWords As Int32 = wordList.Count(Function(word) word.Length > 100)
Run Code Online (Sandbox Code Playgroud)
编译器不喜欢这个,因为他希望没有参数List.Count:
"Public Readonly Property Count As Integer"没有参数,其返回类型无法编入索引.
如果我声明它IEnumerable(Of String)按预期工作:
Dim wordSeq As IEnumerable(Of String) = New List(Of String)
Dim longWords As Int32 = wordSeq.Count(Function(word) word.Length > 100)
Run Code Online (Sandbox Code Playgroud)
为什么会这样?什么阻止编译器使用Enumerable扩展方法Count而不是ICollection.Count属性.请注意,我已经添加了Imports System.Linq和这两个Option Strict和Option Infer的On.我正在使用.NET 4.0(Visual Studio 2010).
我很困惑,因为在C#中这没有问题:
List<String> wordList = new List<String>();
int longWordCount …Run Code Online (Sandbox Code Playgroud) 在这里和这里阅读,我理解查询语法和方法扩展几乎是一种语法差异.但现在,我有一个包含测量数据的数据结构,并希望确定百分位数.我写:
var ds = (from device in dataSet.devices
where !device.paramValues[i].Equals(double.NaN)
select device.paramValues[i]).OrderBy(val => val);
double median = percentile(ds as IOrderedEnumerable<double>, 0.5);
Run Code Online (Sandbox Code Playgroud)
一切正常.ds是类型的System.Linq.OrderedEnumerable<double,double>
令我困惑的是用查询语法编写整个内容:
var ds = (from device in dataSet.devices
where !device.paramValues[i].Equals(double.NaN)
orderby device.paramValues[i]
select device.paramValues[i]);
double median = percentile(ds as IOrderedEnumerable<double>, 0.5);
Run Code Online (Sandbox Code Playgroud)
现在,ds是类型,System.Linq.Enumerable.WhereSelectEnumerableIterator<Dataset.DeviceData,double>并且对百分位函数的调用失败.
还不确定我在这里缺少什么... - 没有特别的理由为什么我更喜欢第二种语法,但我想了解其中的差异......感谢您的帮助!