标签: linq-to-sql

从字符串映射枚举

我在数据库表中有一个字符串列,它在代码中映射到枚举.在我的dbml文件中,当我将"类型"设置为时,MyTypes.EnumType我收到以下错误:

错误1 DBML1005:不支持类型'Table1'的列'EnumCol'中的DbType'VarChar(50)NOT NULL'和类型'MyTypes.EnumType'之间的映射.

这个问题: LINQ to SQL字符串到枚举 表明我想要做的是可能的,但它是如何完成的?

c# linq-to-sql

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

使用Linq to SQL,如何在表中找到列的最小值和最大值?

我想找到一个最快的方法来获得一个表中的列的最小值和最大值,其中只有一个Linq to SQL往返.所以我知道这将在两个往返中起作用:

int min = MyTable.Min(row => row.FavoriteNumber);
int max = MyTable.Max(row => row.FavoriteNumber);
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用,group但我没有group by条款,我想聚合整个表格!如果没有分组,我就不能使用.Min.我试过这个:

from row in MyTable 
group row by true into r 
select new { 
    min = r.Min(z => z.FavoriteNumber), 
    max = r.Max(z => z.FavoriteNumber) 
}
Run Code Online (Sandbox Code Playgroud)

但是这个疯狂的组子句似乎很愚蠢,而它所做的SQL比它需要的更复杂.

那么,有没有办法只是得到正确的SQL?

编辑:这些家伙也失败了:Linq to SQL:如何在没有小组的情况下聚合?......如果真的没有答案,LINQ设计师的疏忽.

编辑2:我在SQL Server Management Studio执行计划分析中查看了我自己的解决方案(使用无意义的常量group by子句),它在我看来它与生成的计划完全相同:

SELECT MIN(FavoriteNumber), MAX(FavoriteNumber)
FROM MyTable
Run Code Online (Sandbox Code Playgroud)

因此,除非有人能够提出一个更简单或同样好的答案,我想我必须将其标记为自己回答.思考?

c# sql linq-to-sql

27
推荐指数
2
解决办法
3万
查看次数

LINQ to SQL - 您的DataContext在哪里?

我在数据访问对象库中使用LINQ to SQL.该库用于Web(Web应用程序/ Web服务)和非Web(Windows服务)上下文.最初,我存储了DataContext当前,HttpContext因为它允许我管理一个相当小的工作单元(一个Web请求)并避免Web应用程序中的全局对象.显然,这在Windows服务中不起作用.

Rick Strahl有一篇关于管理DataContext生命的好文章:http://www.west-wind.com/weblog/posts/246222.aspx.不幸的是,我无法决定最好的方法.一个全球性DataContext的,他提到的原因不能正常工作,每个线程DataContext看起来很复杂,而且可能更麻烦比它的价值,并为每个对象实例似乎挑剔-你失去了一些优雅当您将DataContext用来创建一个DAODAO,因此可以updatedelete稍后 - 更不用说,这种关系有一些不愉快的鸡肉和蛋白.

有没有人有个人经验表明一种方法比另一种更好?或者更好的是,有没有人有第四种或第五种方法,我没有看到?存储和管理您的最佳位置在哪里DataContext

asp.net linq-to-sql

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

为join + linq join中的所有表选择All columns

如何使用linq从连接中的表中选择所有列

SQL:

select CTRL_RUN_JOB.*, CTRL_DATA_STREAM.*
 from CTRL_RUN_JOB inner join CTRL_DATA_STREAM
      on CTRL_RUN_JOB.DATA_STREAM_ID= CTRL_DATA_STREAM.DATA_STREAM_ID
Run Code Online (Sandbox Code Playgroud)

LINQ:

from CTLJCRJOB in CTRL_RUN_JOBs 
join CTLRFDSTM in CTRL_DATA_STREAMs 
on CTLJCRJOB.DATA_STREAM_ID equals CTLRFDSTM.DATA_STREAM_ID
select  new {
         CTLJCRJOB.*  // ???
        ,CTLRFDSTM.*  // ???
}
Run Code Online (Sandbox Code Playgroud)

谢谢

linq linq-to-sql

26
推荐指数
2
解决办法
4万
查看次数

Linq where column ==(null reference)与column == null不同

我遇到了linq-to-sql的一个相当奇怪的问题.在以下示例中,

var survey = (from s in dbContext.crmc_Surveys
                                   where (s.crmc_Retail_Trade_Id == tradeId) && (s.State_.Equals(state))
                                   select s).First();
Run Code Online (Sandbox Code Playgroud)

如果tradeId为null,则其行为不像我特意指定null那样,

var survey = (from s in dbContext.crmc_Surveys
                                   where (s.crmc_Retail_Trade_Id == null) && (s.State_.Equals(state))
                                   select s).First();
Run Code Online (Sandbox Code Playgroud)

这是我想要的行为.事实上,除非两个值都为非null,否则它不会返回任何内容.我无法弄清楚如何完成这几个不同的linq查询.有任何想法吗?

.net c# linq linq-to-sql

26
推荐指数
1
解决办法
4万
查看次数

存储库模式:每个实体的一个存储库类?

假设您在LINQ类中定义了以下实体:

Product
Customer
Category
Run Code Online (Sandbox Code Playgroud)

我应该为所有人拥有一个存储库类:

StoreRepository
Run Code Online (Sandbox Code Playgroud)

......或者我应该:

ProductRepository
CustomerRepository
CategoryRepository
Run Code Online (Sandbox Code Playgroud)

每个人的利弊是什么?就我而言,我的解决方案中有几个"应用程序"...... Store应用程序只是其中之一.

linq asp.net-mvc repository-pattern linq-to-sql

26
推荐指数
2
解决办法
5578
查看次数

LINQ忽略重音和案例

使用LINQ通过Where忽略重音和大小写的方法过滤元素的最简单方法是什么?

到目前为止,我已经能够通过调用属性上的方法来忽略Casing,我认为这不是一个好主意,因为它为每个元素调用相同的方法(对吧?).

所以这就是我到目前为止所得到的:

var result = from p in People
             where p.Name.ToUpper().Contains(filter.ToUpper())
             select p;
Run Code Online (Sandbox Code Playgroud)

请告诉我这是不是一个好习惯,也是忽略重音的最简单方法.

.net c# linq filtering linq-to-sql

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

Linq - 按日期分组并选择计数

我目前正在解决一个问题,我想运行一个查询,按所选日期对结果进行分组.

对于这个例子,想象一个像这样的简单模型:

public class User
{
      public DateTime LastLogIn {get; set;}
      public string Name {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找的解决方案是获取按日期登录的用户数.在数据库中,DateTime与日期和时间组件一起存储,但对于此查询,我真的只关心日期.

我现在拥有的是:

    context.Users
            .Where((x.LastLogIn  >= lastWeek)    
                && (x.LastLogIn <= DateTime.Now))
            .GroupBy(x => EntityFunctions.TruncateTime(x.LastLogIn))
            .Select(x => new
            {
                Value = x.Count(),
                Day = (DateTime)EntityFunctions.TruncateTime(x.Key)
            }).ToList();
Run Code Online (Sandbox Code Playgroud)

然而,上面返回一个空列表.

最终目标是拥有一个对象列表,其中包含一个值(一天登录的用户数)和一天(相关日期)

有什么想法吗?

将查询更改为:

    context.Users
            .Where((x.LastLogIn  >= lastWeek)    
                && (x.LastLogIn <= DateTime.Now))
            .GroupBy(x => EntityFunctions.TruncateTime(x.LastLogIn))
            .Select(x => new
            {
                Value = x.Count(),
                Day = (DateTime)x.Key
            }).ToList();
Run Code Online (Sandbox Code Playgroud)

它现在返回一个包含单个项目的列表,其中Value是与where子句匹配的Users总数,而Day是第一天.它似乎仍然没有能够分组

注意:结果是上面的代码是对的,我只是做了别的错误.

它生成的Sql是(注意这里可能是非常轻微的语法错误,我为此调整它):

SELECT 
1 AS [C1], 
[GroupBy1].[A1] AS [C2], 
 CAST( [GroupBy1].[K1] …
Run Code Online (Sandbox Code Playgroud)

c# linq entity-framework linq-to-sql

26
推荐指数
3
解决办法
3万
查看次数

LINQ to SQL和Null字符串,我如何使用Contains?

这是查询

from a in this._addresses
where a.Street.Contains(street) || a.StreetAdditional.Contains(streetAdditional)
select a).ToList<Address>()
Run Code Online (Sandbox Code Playgroud)

如果where子句中的两个属性都有值,这可以正常工作,但是如果例如a.StreetAdditional为null(大多数时候),我将得到一个空引用异常.

有没有解决这个问题?

谢谢,

.net c# linq-to-sql

25
推荐指数
3
解决办法
4万
查看次数

多个英文单词像LINQ to SQL一样

可能重复:
多元化 - Singularize

C#4.0(可能是旧版本,但我只用4.0测试过)Linq-to-SQL生成器会使你的表名多元化; 甚至像Territory这样的复数复数.它知道领土是复数.反正有没有访问这个复数函数?

c# pluralize linq-to-sql

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