我创建了两个类,其中一个类之间有隐式转换:
public class Class1
{
public int Test1;
}
public class Class2
{
public int Test2;
public static implicit operator Class1(Class2 item)
{
return new Class1{Test1 = item.Test2};
}
}
Run Code Online (Sandbox Code Playgroud)
当我创建一个类型的新列表并尝试将<T>转换为另一个类型时,它会因InvalidCastException而失败:
List<Class2> items = new List<Class2>{new Class2{Test2 = 9}};
foreach (Class1 item in items.Cast<Class1>())
{
Console.WriteLine(item.Test1);
}
Run Code Online (Sandbox Code Playgroud)
但是,这可以正常工作:
foreach (Class1 item in items)
{
Console.WriteLine(item.Test1);
}
Run Code Online (Sandbox Code Playgroud)
为什么在使用Cast <T>时没有调用隐式转换?
我正在使用LINQ to SQL在Sql server 2008中获取FullTextSearch存储过程的搜索结果.我将过程从服务器资源管理器拖到设计器,并使用适当的返回类型和参数创建了方法.现在问题是,我需要获取调用此方法的结果的Count,因此使用我的存储库方法(将调用Sproc方法并将结果作为IQueryable返回),我进行以下调用.
var result = repository.FullTextSearch(searchText);
int resultsCount = result.Count();
var ret = result.Skip((pageNumber - 1) * PageSize).Take(PageSize).ToList();
Run Code Online (Sandbox Code Playgroud)
每次我尝试运行它时,此代码都会生成一个InvalidOperationException,异常说(是的,你猜对了!)"查询结果不能多次枚举."
为Sproc生成的方法返回ISingleResult,它应该是OK AFAIK.我需要在我的视图上支持分页,所以我需要知道总页数,如果我能得到所有项目的计数,那么(再次AFAIK)是可能的.
伙计,我在这里想念的是什么?
我目前在IIS Express中为我正在处理的每个应用程序配置了站点.它们中的每一个都设置为在端口80和443上本地运行,但具有单独的绑定(http:// site1 /和http:// site2 /),这些别名指向我的hosts文件中的本地别名.
我可以在直接启动IIS Express时(从命令行)启动这些站点,但是当调试失败时让VS2010启动它们.第一个站点将按预期启动和调试,但第二个站点将启动生成错误:"无法启动IIS Express Web服务器.端口'80'正在使用中."
这是我正在使用的IIS Express配置(略微修改以删除项目名称):
<site name="Site1" id="1" serverAutoStart="true">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="Site1Path" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:80:Site1" />
<binding protocol="https" bindingInformation="*:443:Site1" />
</bindings>
</site>
<site name="Site2" id="2" serverAutoStart="true">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="Site2Path" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:80:Site2" />
<binding protocol="https" bindingInformation="*:443:Site2" />
</bindings>
</site>
Run Code Online (Sandbox Code Playgroud)
看起来VS正在检查当前正在端口80上侦听的任何内容,而IIS Express则不受此限制.我仍然可以将VS附加到由命令行启动的IIS Express实例,但我更愿意让VS管理它们.
这是VS2010如何处理IIS Express的限制,如果是这样,有什么好的解决方法?
基本问题......
我有一个执行以下代码的方法:
IList<Gig> gigs = GetGigs().WithArtist(artistId).ToList();
Run Code Online (Sandbox Code Playgroud)
GetGigs()方法通过LinqToSql从我的数据库中获取Gigs ...
因此,当执行GetGigs().WithArtist(artistId).ToList()时,我得到以下异常:
Member access 'ListenTo.Shared.DO.Artist Artist' of 'ListenTo.Shared.DO.Act' not legal on type 'System.Collections.Generic.List`1[ListenTo.Shared.DO.Act]
Run Code Online (Sandbox Code Playgroud)
请注意,扩展功能"WithArtist"如下所示:
public static IQueryable<Gig> WithArtist(this IQueryable<Gig> qry, Guid artistId)
{
return from gig in qry
where gig.Acts.Any(act => (null != act.Artist) && (act.Artist.ID == artistId))
orderby gig.StartDate
select gig;
}
Run Code Online (Sandbox Code Playgroud)
如果我用一个在代码中构造gigs集合的方法替换GetGigs()方法(而不是通过LinqToSQL从DB中),我不会得到异常.
所以我很确定问题出在我的LinqToSQl代码而不是对象结构上.
但是,我没有IDEA为什么LinqToSQl版本无法正常工作,所以我在下面列出了所有相关代码.任何帮助都会非常感激地接受!
LinqToSQL代码....
public IQueryable<ListenTo.Shared.DO.Gig> GetGigs()
{
return from g in DBContext.Gigs
let acts = GetActs(g.ID)
join venue in DBContext.Venues on g.VenueID equals venue.ID
select new ListenTo.Shared.DO.Gig …Run Code Online (Sandbox Code Playgroud) 我正在向依赖项部分添加依赖项(mongocsharpdriver),net45如下所示:
"net45": {
"dependencies": {
"System.Data": "",
"System.ComponentModel.DataAnnotations": "",
"mongocsharpdriver": "1.9.1"
}
},
Run Code Online (Sandbox Code Playgroud)
基于我使用的所有其他依赖项,这应该足以使其工作.这是我投入的一些示例代码来测试它:
MongoDB.Bson.BsonArray test;
MongoDB.Driver.RemoveFlags test2;
Run Code Online (Sandbox Code Playgroud)
有了这个,我希望编译,但MongoDB.Driver不被认可.MongoDB.Bson.BsonArray工作良好.
在同一个程序包中有两个程序集在vNext中是不受支持的方案,还是尚未实现?
我有2个表:
Activities ActivityKeywords
********** ****************
ID --> ActivityID
Name Keyword
Run Code Online (Sandbox Code Playgroud)
我需要返回与特定关键字匹配的所有活动.