小编Joh*_*ohn的帖子

LINQToSQL可以与使用sp_executeSQL的sproc一起使用吗?如果没有,你怎么处理?

LINQToSQL不喜欢我的sproc.它说sproc的返回类型为"none",这可能是因为我使用sp_ExecuteSQL语句来生成结果.

SQL Server Sproc代码

我有一个类似于以下的存储过程
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元组.

  • 12345 | 探戈舞
  • 98765 | 现金

目标

此存储过程将用于在搜索页面上返回搜索结果.这是一种相当常见的搜索模式.我想找到符合条件的Foos,但条件正在应用于单独的表格.我可以选择直接编写此查询而不使用sp_executeSQL,但是这种方法的作用是创建只包含实际查询表的SQL.在现实世界的场景中,我可以有12个连接,而不是1个,这种方法允许我只将实际用作条件的连接串起来.

问题

LINQ to SQL不喜欢它.它表示此查询返回类型"none",并且不允许我指定返回类型.我不确定其他ORM,如NHibernate,Entity Framework或LLBLGen是否能够处理这个问题.LINQToSQL到目前为止在该项目上运行良好,我95%完成了该项目,并且不想为单个方法使用不同的ORM.如果我进行进一步的更改,它可能是重构的东西,但是现在,我还没准备好为此转换到不同的ORM.

我真的想找到一种方法在LinqToSql中使这个工作!我不确定它是否可以.我没有找到关于这个明显限制的任何官方文件.

到目前为止我正在考虑的替代方案 …

stored-procedures linq-to-sql

3
推荐指数
1
解决办法
911
查看次数

请解决签出并锁定vs更新和合并版本控制辩论

我已经使用了几年的源代码控制(如果算上Source Safe年份),但我绝不是专家.我们目前使用的是较旧版本的Sourcegear Vault.我们的团队目前使用结账和锁定模式.我宁愿切换到更新和合并模型,但需要说服其他开发人员.

开发人员(不是我)设置为检查和锁定的原因是由于叛逆文件.我们公司与一家咨询公司合作,完成我们的大部分开发工作.几年前,在我离开这里之前很久,他们已经设置了源代码控制以进行更新和合并.顾问去办理登机手续,但遇到合并错误.然后,他们选择以断开连接的方式工作数月.当最后时间测试项目时,出现了错误,并且发现代码库有很大不同.几周的工作最终不得不重做.所以他们去检查并锁定解决方案.

我不喜欢签出和锁定,因为这使得2个或更多人同时在同一个项目中工作变得非常困难.每当您添加任何类型的新文件或更改文件名时,源代码管理都会检出.csproj文件.这可以防止任何其他开发人员添加/重命名文件.

我认为只使.csproj文件可以合并,但Sourcegear网站说这是一个坏主意,因为csproj是IDE自动生成的,你不能保证两个不同的VS生成的文件将产生相同的代码.

我的朋友(另一位开发人员)告诉我,解决方案是立即检查您的项目.对我来说,问题在于我可能有一个不会构建的本地副本,它可能需要一些时间来构建.我可能需要几个小时才能使构建工作,这意味着在此期间,没有其他人能够创建和重命名文件.

我反驳说正确的解决方案是切换到可靠的模型.我对"叛徒档案"问题的回答是,这是一个程序员纪律差的问题,你不应该使用较弱的程序员选择来解决不良的纪律; 相反,你应该采取行动来解决缺乏程序员纪律的问题.

那么谁是对的?办理登机手续 - 查看叛徒档案问题的合理答案?或者这个.csproj问题对于多个开发人员来说太麻烦了吗?或者是Sourcegear是错的,应该可以将csproj文件设置为更新和合并吗?

version-control merge sourcegear-vault visual-studio

3
推荐指数
1
解决办法
812
查看次数

在ASP.Net MVC中使用URL.Content时出错

我有以下用剃须刀编写的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)

请协助.

asp.net-mvc

2
推荐指数
1
解决办法
2936
查看次数

链接c#看起来像jQuery一个好主意?

我正在考虑使用扩展方法链接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:更多解释为"为什么"我正在考虑这个问题. 我有两件事情在继续:

  1. 我从一个对象获取数据并使用它来设置另一个对象的属性.
  2. 我需要对这些属性执行一些操作.

所以我的初始代码看起来更像

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)

初始化器很棒,但它们也将所有属性捆绑在一起,我希望属性集接近我将采取的操作.

c# extension-methods method-chaining

2
推荐指数
1
解决办法
793
查看次数

在SQL Server中,过滤一整天的项目的最佳方法是什么

在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)

sql-server filtering

2
推荐指数
1
解决办法
2557
查看次数

在ASP.Net MVC路由中,如何路由2个看起来相同但具有不同类型的不同路径?

在ASP.Net MVC中,我想要两条不同的路线:

http://mysite.com/foo/12345

http://mysite.com/foo/bar

在类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?

asp.net-mvc routes

2
推荐指数
1
解决办法
1578
查看次数

使用LINQ,您如何获得所有标签控件

我想获得属于用户控件的所有标签控件的集合.我有以下代码:

        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)

再次,没有成功.

linq label

1
推荐指数
1
解决办法
1123
查看次数

在SQL Server中,是否可以在IN子句中包含2列?

我正在尝试使用IN子句,但过滤需要在由2列定义的一组项上.这可能吗?可能还有其他方法可以做到这一点(例如表变量),但如果可能的话,我想将其作为IN子句来实现,因为在我的应用程序中动态创建会更优雅,更简单.

这个伪代码可能会让我更清楚我正在尝试做什么.

SELECT *
FROM Distributors
WHERE (City,State) IN (('Springfield','OH'), ('Springfield','MO'), ('Houston','TX'))
Run Code Online (Sandbox Code Playgroud)

sql sql-server in-clause

1
推荐指数
1
解决办法
78
查看次数

是否可以吞下DB INSERT的异常

是否可以吞下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调用.这恰好发生在S​​QL Server中.

sql sql-server exception-handling

0
推荐指数
1
解决办法
216
查看次数