LINQToSQL不喜欢我的sproc.它说sproc的返回类型为"none",这可能是因为我使用sp_ExecuteSQL语句来生成结果.
我有一个类似于以下的存储过程
CREATE PROCEDURE Foo
@BarName varchar(50)
AS
BEGIN
DECLARE @SQL NVARCHAR(1024)
SET @SQL = 'SELECT tbFoo.FooID, tbFoo.Name FROM tbFOO ';
IF @BarName IS NOT NULL
BEGIN;
SET @SQL = @SQL
+ ' JOIN tbBar '
+ ' ON tbFoo.FooID = tbBar.FooID '
+ ' AND tbBar.BarName = ''' + @BarName + ''''
END;
EXEC sp_executeSQL @SQL
END
这个sproc返回一组FooID | FooName元组.
此存储过程将用于在搜索页面上返回搜索结果.这是一种相当常见的搜索模式.我想找到符合条件的Foos,但条件正在应用于单独的表格.我可以选择直接编写此查询而不使用sp_executeSQL,但是这种方法的作用是创建只包含实际查询表的SQL.在现实世界的场景中,我可以有12个连接,而不是1个,这种方法允许我只将实际用作条件的连接串起来.
LINQ to SQL不喜欢它.它表示此查询返回类型"none",并且不允许我指定返回类型.我不确定其他ORM,如NHibernate,Entity Framework或LLBLGen是否能够处理这个问题.LINQToSQL到目前为止在该项目上运行良好,我95%完成了该项目,并且不想为单个方法使用不同的ORM.如果我进行进一步的更改,它可能是重构的东西,但是现在,我还没准备好为此转换到不同的ORM.
我真的想找到一种方法在LinqToSql中使这个工作!我不确定它是否可以.我没有找到关于这个明显限制的任何官方文件.
我已经使用了几年的源代码控制(如果算上Source Safe年份),但我绝不是专家.我们目前使用的是较旧版本的Sourcegear Vault.我们的团队目前使用结账和锁定模式.我宁愿切换到更新和合并模型,但需要说服其他开发人员.
开发人员(不是我)设置为检查和锁定的原因是由于叛逆文件.我们公司与一家咨询公司合作,完成我们的大部分开发工作.几年前,在我离开这里之前很久,他们已经设置了源代码控制以进行更新和合并.顾问去办理登机手续,但遇到合并错误.然后,他们选择以断开连接的方式工作数月.当最后时间测试项目时,出现了错误,并且发现代码库有很大不同.几周的工作最终不得不重做.所以他们去检查并锁定解决方案.
我不喜欢签出和锁定,因为这使得2个或更多人同时在同一个项目中工作变得非常困难.每当您添加任何类型的新文件或更改文件名时,源代码管理都会检出.csproj文件.这可以防止任何其他开发人员添加/重命名文件.
我认为只使.csproj文件可以合并,但Sourcegear网站说这是一个坏主意,因为csproj是IDE自动生成的,你不能保证两个不同的VS生成的文件将产生相同的代码.
我的朋友(另一位开发人员)告诉我,解决方案是立即检查您的项目.对我来说,问题在于我可能有一个不会构建的本地副本,它可能需要一些时间来构建.我可能需要几个小时才能使构建工作,这意味着在此期间,没有其他人能够创建和重命名文件.
我反驳说正确的解决方案是切换到可靠的模型.我对"叛徒档案"问题的回答是,这是一个程序员纪律差的问题,你不应该使用较弱的程序员选择来解决不良的纪律; 相反,你应该采取行动来解决缺乏程序员纪律的问题.
那么谁是对的?办理登机手续 - 查看叛徒档案问题的合理答案?或者这个.csproj问题对于多个开发人员来说太麻烦了吗?或者是Sourcegear是错的,应该可以将csproj文件设置为更新和合并吗?
我有以下用剃须刀编写的ASP.NET MVC页面:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<title>SelectorTests</title>
<link href="@{ Url.Content("~/Content/themes/base/jquery-ui.css"); }" rel="stylesheet" type="text/css" />
<script src="@{ Url.Content("~/Scripts/jquery-1.4.4.min.js"); }" type="text/javascript"></script>
<script src="@{ Url.Content("~/Scripts/jquery-ui.min.js"); }" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
$('h1').css('background-color', 'purple');
});
</script>
</head>
<body>
<div>
<h1>My Header</h1>
foobar
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
URL.Content无法正常工作.当我在FF中执行查看源时,相关的行返回为
<link href="" rel="stylesheet" type="text/css" />
<script src="" type="text/javascript"></script>
<script src="" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
请协助.
我正在考虑使用扩展方法链接ac#语句,看起来像下面的jQuery:
foo foo2 =
new foo().Title(foo1.Title)
.Name(foo1.Name)
.DoSomeStuff()
.DoSomeMoreStuff();
Run Code Online (Sandbox Code Playgroud)
这是好主意吗?
public class foo
{
public string Title {get;set;}
public string Name {get;set;}
public int Age {get;set;}
public foo(){}
}
public static class fooExtension
{
public static foo Title(this foo source, string title)
{
source.Title = title;
return source;
}
//and other extensions
}
Run Code Online (Sandbox Code Playgroud)
Upadate:更多解释为"为什么"我正在考虑这个问题. 我有两件事情在继续:
所以我的初始代码看起来更像
foo2.bars = foo1.bars;
foo2.RemoveUnderage();
foo2.NotifyPatronsBarsAreFull();
Run Code Online (Sandbox Code Playgroud)
相反,我认为写作可能更具描述性:
foo2.bars(foo1.bars).RemoveUnderage().NotifyPatrons();
Run Code Online (Sandbox Code Playgroud)
初始化器很棒,但它们也将所有属性捆绑在一起,我希望属性集接近我将采取的操作.
在SQL Server中,我想显示特定日期的所有项目.最好的方法是什么:DATEPART,BETWEEN,OR> = + <?所有3都应该在功能上有效,但是其中一些性能更好/更差?
1)
SELECT *
FROM BlogPosts
WHERE DATEPART(yyyy,BlogPostDate) = 2011
AND DATEPART(m,BlogPostDate) = 5
AND DATEPART(d,BlogPostDate) = 7
Run Code Online (Sandbox Code Playgroud)
2)
SELECT *
FROM BlogPosts
WHERE BlogPostDate BETWEEN '2011-05-07' AND '2011-05-07 23:59:59'
Run Code Online (Sandbox Code Playgroud)
3)
SELECT *
FROM BlogPosts
WHERE BlogPostDate >= '2011-05-07'
AND BlogPostDate < '2011-05-08'
Run Code Online (Sandbox Code Playgroud) 在ASP.Net MVC中,我想要两条不同的路线:
和
在类Foo中,我有两个返回ActionResult的方法
public ActionResult DetailsById(int id)
{
. . . some code
}
Run Code Online (Sandbox Code Playgroud)
和
public ActionResult DetailsByName(string name)
{
. . . some code
}
Run Code Online (Sandbox Code Playgroud)
如何设置2个路由,以便如果参数是int,它将转到DetailsById,否则转到DetailsByName?
我想获得属于用户控件的所有标签控件的集合.我有以下代码:
var labelControls = from Control ctl in this.Controls
where ctl.GetType() == typeof(Label)
select ctl;
Run Code Online (Sandbox Code Playgroud)
但结果是零结果.
请协助.谢谢.
编辑我也试过以下代码但没有成功.
this.Controls
.OfType<Label>()
.Where(ctl => ctl.ID.Contains("myPrefix"))
.ToList()
.ForEach(lbl => lbl.ForeColor = System.Drawing.Color.Black);
Run Code Online (Sandbox Code Playgroud)
再次,没有成功.
我正在尝试使用IN子句,但过滤需要在由2列定义的一组项上.这可能吗?可能还有其他方法可以做到这一点(例如表变量),但如果可能的话,我想将其作为IN子句来实现,因为在我的应用程序中动态创建会更优雅,更简单.
这个伪代码可能会让我更清楚我正在尝试做什么.
SELECT *
FROM Distributors
WHERE (City,State) IN (('Springfield','OH'), ('Springfield','MO'), ('Houston','TX'))
Run Code Online (Sandbox Code Playgroud) 是否可以吞下INSERTS的重复密钥违例异常,还是应该检查记录是否存在?
所以,假设我有一个表格照片,其中包含一个字段:PhotoName.我正在浏览文件目录以向Photo添加项目.在这个过程中,当我找到光子名称时,它可能已经存在于数据库中.所以有两种方法可以解决这个问题:
1) //Look to see if it exists before adding it. Only add it if it does not exist.
bool photoExists = SQLSELECTStatementToCheckIfThePhotoExists(photoName);
if(!photoExists)
SQLCommandToInsertPhoto(photoName)
or 2) //Assume that it doesn't exist. If it does, catch and ignore.
try
{
SQLCommandToInsertPhoto(photoName);
}
catch(DuplicateKeyException ex)
{
//swallow it and continue on as if nothing happened.
}
Run Code Online (Sandbox Code Playgroud)
一方面,我不一定喜欢"吞咽"异常的概念,但另一方面,try ... catch只使用一次DB调用.这恰好发生在SQL Server中.
sql-server ×3
asp.net-mvc ×2
sql ×2
c# ×1
filtering ×1
in-clause ×1
label ×1
linq ×1
linq-to-sql ×1
merge ×1
routes ×1