早在2008年底,就LINQ to SQL的未来发生了很多争论.许多人认为微软在.NET 4.0中对实体框架的投资是LINQ to SQL没有未来的标志.我想我会在做出自己的决定之前等待,因为人们不同意.
快进18个月,我有供应商提供依赖LINQ to SQL的解决方案,我个人试了一下,非常喜欢使用它.我想这是留下来的.
但是我正在读一本新书(Ben Watson的C#4.0 How-To)和第21章(LINQ),他认为它"或多或少被微软推荐"并建议使用LINQ to Entity Framework.
我的问题是LINQ to SQL是否正式被弃用和/或权威实体(Microsoft,Scott Gu等)是否正式建议使用LINQ to Entities而不是LINQ to SQL.
我需要构建一个动态过滤器,我想继续使用实体.由于这个原因,我想使用albahari的PredicateBuilder.
我创建了以下代码:
var invoerDatums = PredicateBuilder.True<OnderzoeksVragen>();
var inner = PredicateBuilder.False<OnderzoeksVragen>();
foreach (var filter in set.RapportInvoerFilter.ToList())
{
if(filter.IsDate)
{
var date = DateTime.Parse(filter.Waarde);
invoerDatums = invoerDatums.Or(o => o.Van >= date && o.Tot <= date);
}
else
{
string temp = filter.Waarde;
inner = inner.Or(o => o.OnderzoekType == temp);
}
}
invoerDatums = invoerDatums.And(inner);
var onderzoeksVragen = entities.OnderzoeksVragen
.AsExpandable()
.Where(invoerDatums)
.ToList();
Run Code Online (Sandbox Code Playgroud)
当我运行代码时,只有一个过滤器,它不是日期过滤器.因此只有内部谓词被填充.执行谓词时出现以下错误.
参数"f"未绑定在指定的LINQ to Entities查询表达式中.
在搜索答案时,我找到了以下页面.但这已经在LINQKit中实现了.
是否有其他人遇到此错误并知道如何解决?
在尝试执行此查询时:
var query = from dpr in ctx.DPR_MM
join q in ctx.QOT on dpr.DPR_QOT_ID equals qot_id
join p in ctx.PAY_MM on new { q.QOT_SEC_ID, dpr.DPR_TS } equals new { p.PAY_SEC_ID, p.PAY_DATE }
where q.QOT_ID = qot_id
select new
{
dpr.dpr_ts,
dpr.dpr_close,
pay.First().pay_dividend
};
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
join子句中某个表达式的类型不正确.调用"加入"时类型推断失败.
QOT_SEC_ID是类型decimal和 PAY_SEC_ID类型int32.我不允许在表格中更改它.
无论我做什么,我都无法在模特的属性中改变它.我试图转换像这样的类型:
join p in ctx.PAY on new { sec_id = (Int32)(q.QOT_SEC_ID), dpr.DPR_TS } equals new { sec_id = (Int32)p.PAY_SEC_ID, p.PAY_DATE }
Run Code Online (Sandbox Code Playgroud)
但得到上面的错误.
linq中.edmx和.dbml文件有什么区别?在VS 2008中哪个数据源是edmx或dbml的最佳选择?在VS 2008中使用edmx文件会出现任何问题?我可以在VS-2008中使用edmx吗?
var _My_ResetSet_Array = _DB
.tbl_MyTable
.Where(x => x.Active == true
&& x.DateTimeValueColumn <= DateTime.Now)
.Select(x => x);
Run Code Online (Sandbox Code Playgroud)
上层查询工作正常.
但我只想检查日期值.
但是上层查询检查日期+时间值.
在传统的mssql中,我可以编写如下的查询.
SELECT * FROM dbo.tbl_MyTable
WHERE
CAST(CONVERT(CHAR(10), DateTimeValueColumn, 102) AS DATE) <=
CAST(CONVERT(CHAR(10),GETDATE(),102) AS DATE)
AND
Active = 1
Run Code Online (Sandbox Code Playgroud)
所以任何人都可以给我建议我怎样才能检查Linq中的日期值.
我正在尝试使用LINQ to Entities构建搜索页面,但是下面的代码给出了一个运行时错误,关于lte没有识别'Boolean StartsWith().代码编译得很好.我怎样才能解决这个问题,而不是将StartsWith过滤到存储过程?
return from dp in dents.DirectoryPersonEntrySet
where
((dp.LastName.StartsWith(searchTerm, StringComparison.CurrentCultureIgnoreCase)) ||
(dp.Department.StartsWith(searchTerm, StringComparison.CurrentCultureIgnoreCase)) ||
dp.Extension.StartsWith(searchTerm, StringComparison.CurrentCultureIgnoreCase))
select dp;
Run Code Online (Sandbox Code Playgroud) 请帮忙.我试图弄清楚如何在linq查询中使用DATE或DATETIME进行比较.
示例:如果我想要在今天之前启动的所有员工姓名,我会在SQL中执行以下操作:
SELECT EmployeeNameColumn
FROM EmployeeTable
WHERE StartDateColumn.Date <= GETDATE() //Today
Run Code Online (Sandbox Code Playgroud)
但是linq怎么样?
DateTime startDT = //Today
var EmployeeName =
from e in db.employee
where e.StartDateColumn <= startDT
Run Code Online (Sandbox Code Playgroud)
上面的WHERE不起作用:
异常详细信息:System.NotSupportedException:LINQ to Entities中不支持指定的类型成员"Date".仅支持初始值设定项,实体成员和实体导航属性.
如何将int和int转换为字符串?以下都不起作用:
from s in ctx.Services
where s.Code.ToString().StartsWith("1")
select s
from s in ctx.Services
where Convert.ToString(s.Code).StartsWith("1")
select s
from s in ctx.Services
where ((string)s.Code).ToString().StartsWith("1")
select s
Run Code Online (Sandbox Code Playgroud)
编辑
我得到的错误是:
LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression
我在我的个人资料页面使用以下LINQ查询:
var userData = from u in db.Users
.Include("UserSkills.Skill")
.Include("UserIdeas.IdeaThings")
.Include("UserInterests.Interest")
.Include("UserMessengers.Messenger")
.Include("UserFriends.User.UserSkills.Skill")
.Include("UserFriends1.User1.UserSkills.Skill")
.Include("UserFriends.User.UserIdeas")
.Include("UserFriends1.User1.UserIdeas")
where u.UserId == userId
select u;
Run Code Online (Sandbox Code Playgroud)
它有一个长对象图并使用许多包含.它现在运行得很好,但是当网站有很多用户时,它会影响性能吗?
我应该用其他方式吗?
linq performance linq-to-entities entity-framework asp.net-mvc-2
我正在尝试执行以下代码并收到错误
public List<Log> GetLoggingData(DateTime LogDate, string title)
{
var context = new LoggingEntities();
var query = from t in context.Logs
where t.Title == title
&& t.Timestamp == LogDate
select t;
return query.ToList();
}
Run Code Online (Sandbox Code Playgroud)
我收到的错误是"LINQ to Entities不支持指定的类型成员'Date'.仅支持初始值设定项,实体成员和实体导航属性." 我已尝试过将各种符号转换为字符串的各种尝试,只比较日期部分,但似乎无法获得正确的组合.任何帮助是极大的赞赏.
linq-to-entities ×10
linq ×8
c# ×5
.net ×2
datetime ×2
linq-to-sql ×2
compare ×1
join ×1
performance ×1