这是一个很长的镜头,我知道......
假设我有一个收藏品
List<MyClass> objects;
Run Code Online (Sandbox Code Playgroud)
我想在集合中的每个对象上运行相同的方法,有或没有返回值.在Linq之前我会说:
List<ReturnType> results = new List<ReturnType>();
List<int> FormulaResults = new List<int>();
foreach (MyClass obj in objects) {
results.Add(obj.MyMethod());
FormulaResults.Add(ApplyFormula(obj));
}
Run Code Online (Sandbox Code Playgroud)
我会爱到可以做这样的事情:
List<ReturnType> results = new List<ReturnType>();
results.AddRange(objects.Execute(obj => obj.MyMethod()));
// obviously .Execute() above is fictitious
List<int> FormulaResults = new List<int>();
FormulaResults.AddRange(objects.Execute(obj => ApplyFormula(obj)));
Run Code Online (Sandbox Code Playgroud)
我还没有发现任何可以做到这一点的事情.有这样的事吗?
如果没有像我上面提到的那样通用,至少可能有一种方法可以用于我现在正在处理的目的:我有一个包含一个包装类的对象的集合:
class WrapperClass {
private WrappedClass wrapped;
public WrapperClass(WrappedClass wc) {
this.wrapped = wc;
}
}
Run Code Online (Sandbox Code Playgroud)
我的代码有一个集合List<WrappedClass> objects
,我想将其转换为List<WrapperClass>
.是否有一些聪明的Linq这样做的方式,没有做单调乏味
List<WrapperClass> result = new List<WrapperClass>();
foreach (WrappedClass obj …
Run Code Online (Sandbox Code Playgroud) 这里有一些代码(显然)无法编译:
var q = from x in myAnonymousTypeCollection
select new {
x.ID,
CalcField = {
switch(x.SomeField) {
case 1:
return Math.Sqrt(x.Field1);
case 2:
return Math.Pow(x.Field2, 2);
default:
return x.Field3;
}
}
};
Run Code Online (Sandbox Code Playgroud)
你得到了照片; 我试图以CalcField
完全不同的方式计算,具体取决于价值SomeField
.我不能使用Func<>
(或者我可以?),因为输入类型是匿名的.那么什么是正确的语法来实现这一点?
WCF newbie here ...我正在尝试使用NetTcpBinding自托管WCF服务.基于MSDN"操作方法"教程,我已经完成了代码中的所有绑定,然后我将其从WsHttpBinding更改为NetTcpBinding,现在看起来像这样:
var baseAddress = new Uri("net.tcp://localhost:8000/MyWebService");
var selfHost = new ServiceHost(typeof(ConcreteWebService), baseAddress);
try {
var binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.Message;
selfHost.AddServiceEndpoint(typeof(IWebService), binding, "TRWebService");
selfHost.Open();
Console.WriteLine("The service is ready at {0}", baseAddress.AbsoluteUri);
Console.WriteLine("Press <ENTER> to terminate service.");
Console.WriteLine();
Console.ReadLine();
selfHost.Close();
} catch (CommunicationException ce) {
Console.WriteLine("An exception occurred: {0}", ce.Message);
selfHost.Abort();
}
Run Code Online (Sandbox Code Playgroud)
事实是,教程然后说你必须运行svcutil.exe来为客户端生成代理...但是由于我切换到NetTcpBinding,svcutil不再工作 - 无法检测我的服务.我搜索了这个问题,发现NetTcpBinding的每一个例子都在app.config文件中进行设置,而不是在代码中,并且它们都添加一个名为"Mex"的端点,绑定类型为"mexTcpBinding".在代码中似乎没有任何等效的东西.
那么,我是否必须更改我的项目以使用app.config,并放弃基于代码的方法?任何人都可以向我解释Mex是什么,为什么我需要它,以及为什么它(显然)不能在代码中调用 - 或者它是否可以,如何或为什么不鼓励?一般来说,何时使用app.config以及何时使用WCF服务代码更好?
我之前问了一个问题,为什么Linq中的左连接不能使用已定义的关系 ; 到目前为止,我还没有得到满意的答复.
现在,在并行轨道上,我已经接受了我需要使用join
关键字,好像我的对象之间没有定义关系,我正在尝试找出如何在Linq中表达我的查询.麻烦的是,它是多个表之间左连接的集合体,连接中涉及多个字段.没有办法简化这个,所以这里是SQL所有未被掩盖的荣耀:
select *
from TreatmentPlan tp
join TreatmentPlanDetail tpd on tpd.TreatmentPlanID = tp.ID
join TreatmentAuthorization auth on auth.TreatmentPlanDetailID = tpd.ID
left join PatientServicePrescription rx on tpd.ServiceTypeID = rx.ServiceTypeID
left join PayerServiceTypeRules pstr on auth.PayerID = pstr.PayerID and tpd.ServiceTypeID = pstr.ServiceTypeID and pstr.RequiresPrescription = 1
where tp.PatientID = @PatientID
Run Code Online (Sandbox Code Playgroud)
(仅供参考,如果它有助于理解我正在尝试做什么:我正在尝试确定是否有任何TreatmentPlanDetail
记录,Patient
其中授权Payer
需要处方ServiceType
,但没有ServicePerscription
记录,或它已经过期. )
现在,这是我的C#代码:
var q = from tp in TreatmentPlans
from tpd in tp.Details
from auth …
Run Code Online (Sandbox Code Playgroud) 我正在使用Entity Framework 5构建我的第一个MVC 4/Razor Web应用程序,并在做出任何设计决策之前做了一些功课.
我看到EF对象来自EntityObject
,它似乎有很多有用的最佳实践构建它,其中最重要的是乐观的并发处理.换句话说,如果2人同时装载123枫树街的简·多伊的纪录,第一个改变了她的名字简·史密斯,第二个改变了她的地址,以321枫树街,那么它很容易让被合并方面的变化在没有冲突的情况下进入记录,而第二个用户尝试修改与第一个用户相同的字段将导致错误.
在另一方面,它似乎是相当标准的做法是创建轻量级数据传输对象的服务器和客户端,并作为或型号为MVC框架之间传递数据.这对于确保最小的客户端流量非常有用,但它会破坏并发检查.
所以我质疑使用DTO的理由.使用DTO的原因是什么?使用EntityObject
as或MVC模型有多糟糕?如上所述,您建议采用哪种其他解决方案来实现乐观并发处理?
c# asp.net-mvc entity-framework asp.net-mvc-4 entity-framework-5
我有一个简单的WCF服务,在我的开发机器上进行测试时工作正常.
现在我已将Web服务移动到Web服务器,并且我正在http://mydomain.com:8005上运行该服务(在调试模式下).打开Web浏览器到该URL显示预期的服务页面,如果我在我正在调用的接口内的服务器上放置一个断点,它会命中断点并返回预期的数据......但是在客户端它返回出现以下错误:
收到http://mydomain.com:8005/的HTTP响应时发生错误.这可能是由于服务端点绑定不使用HTTP协议.这也可能是由于服务器中止HTTP请求上下文(可能是由于服务关闭).请参阅服务器日志以获取更多详
更多线索:界面签名是:
IEnumerable<MyClass> GetThings(out string errMsg);
Run Code Online (Sandbox Code Playgroud)
where MyClass
定义为Serializable,客户端和服务器之间的定义相同.
有什么想法我需要翻转什么秘密开关?
我使用TFS进行源代码控制,但我想使用SourceGear DiffMerge来查看文件差异并进行合并.我找到了工具 - >选项 - >源代码控制 - > Visual Studio Team Foundation Server - >配置用户工具对话框,但设置合并参数非常混乱.这些参数应该是什么?
我有一个IEnumerable<T>
,我想Enumerable.Contains
通过反思调用该方法.我只是在努力使语法正确.这是我现在拥有的:
var containsMethod = typeof(Enumerable).GetMethod("Contains",
new[] {
typeof(IEnumerable<T>),
typeof(T)
});
Run Code Online (Sandbox Code Playgroud)
这只是返回null.
得到的正确方法是MethodInfo
什么?
private static void TestStructInterface()
{
IFoo foo1 = new FooClass(); // works
IFoo foo2 = new FooStruct(); // works
IEnumerable<IFoo> foos1 = new List<FooClass>(); // works
IEnumerable<IFoo> foos2 = new List<FooStruct>(); // compiler error
}
interface IFoo
{
string Thing { get; set; }
}
class FooClass : IFoo
{
public string Thing { get; set; }
}
struct FooStruct : IFoo
{
public string Thing { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
编译器抱怨:
无法将类型'System.Collections.Generic.List <Tests.Program.FooStruct>'隐式转换为'System.Collections.Generic.IEnumerable <Tests.Program.IFoo>'.存在显式转换(您是否错过了演员?)
为什么?
为什么类和结构之间有区别?任何解决方法?
我从这个问题开始,我在那里回答,现在我在这里问更基本的问题.我已将查询简化为:
var q = from ent in LinqUtils.GetTable<Entity>()
from tel in ent.Telephones.DefaultIfEmpty()
select new {
Name = ent.FormattedName,
Tel = tel != null ? tel.FormattedNumber : "" // this is what causes the error
};
Run Code Online (Sandbox Code Playgroud)
tel.FormattedNumber
是一个将字段Number
和Extension
字段组合成一个整齐格式的字符串的属性.这是导致的错误:
System.InvalidOperationException: Could not translate expression 'Table(Entity).SelectMany(ent => ent.Telephones.DefaultIfEmpty(), (ent, tel) => new <>f__AnonymousType0`2(Name = ent.FormattedName, Tel = IIF((tel != null), tel.FormattedNumber, "")))' into SQL and could not treat it as a local expression.
Run Code Online (Sandbox Code Playgroud)
如果我将上面的参考更改为FormattedNumber …
c# ×9
linq ×5
linq-to-sql ×2
wcf ×2
.net ×1
asp.net-mvc ×1
diffmerge ×1
generics ×1
join ×1
left-join ×1
reflection ×1
tfs ×1
wcf-binding ×1