从性能的角度来看,检查数据库中是否存在对象的最佳方法是什么?我正在使用Entity Framework 1.0(ASP.NET 3.5 SP1).
所以,每迈赫达德的回答一个相关的问题,我得到它是一个"正确"的数据库表列中不存储列表.相反,您应该创建另一个表,该表有效地保存所述列表的元素,然后直接或通过联结表链接到它.但是,我想要创建的列表类型将由唯一项组成(与链接问题的结果不同)例).此外,列表中的项目是显式排序的 - 这意味着如果我将元素存储在另一个表中,我每次访问它时都必须对它们进行排序.最后,该列表基本上是原子的,因为任何时候我希望访问列表,我将要访问整个列表而不仅仅是它的一部分 - 因此,必须发出数据库查询以聚集在一起的部分似乎很愚蠢列表.
AKX的解决方案(上面链接)是序列化列表并将其存储在二进制列中.但这似乎也不方便,因为这意味着我不得不担心序列化和反序列化.
有没有更好的解决方案?如果是没有更好的解决办法,那么为什么呢?看来这个问题应该不时出现.
...更多信息让你知道我来自哪里.一旦我刚刚开始理解SQL和数据库,我就开始使用LINQ to SQL了,所以现在我有点被宠坏了因为我希望能够处理我的编程对象模型而不必考虑对象如何被查询或存储在数据库中.
谢谢大家!
约翰
更新:所以在我得到的第一批答案中,我看到"你可以使用CSV/XML路线......但不要!".所以现在我正在寻找原因的解释.请给我一些很好的参考.
另外,为了让您更好地了解我的目标:在我的数据库中,我有一个Function表,它将包含(x,y)对的列表.(该表还有其他信息对我们的讨论没有影响.)我永远不需要看到(x,y)对列表的一部分.相反,我将采取所有这些并在屏幕上绘制它们.我将允许用户拖动节点以偶尔更改值或向绘图添加更多值.
我在实现以下语句时遇到异常.
DateTime result;
if (!DateTime.TryParse(rule.data, out result))
return jobdescriptions;
if (result < new DateTime(1754, 1, 1)) // sql can't handle dates before 1-1-1753
return jobdescriptions;
return jobdescriptions.Where(j => j.JobDeadline.Date == Convert.ToDateTime(rule.data).Date );
Run Code Online (Sandbox Code Playgroud)
例外
The specified type member 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.
Run Code Online (Sandbox Code Playgroud)
我知道异常意味着什么,但我不知道如何摆脱它.有帮助吗?
我正在使用实体,C#和SQL Server来创建一个n层应用程序.我正在创建一些我所有DAL组件共有的基类.在这个基类中,我想处理实体对象继承的ObjectContext基类的连接状态.
编译会引发以下错误:
名称空间'System.Data'中不存在类型或命名空间名称'Objects'(您是否缺少程序集引用?)
此外,using语句System.Data.Objects因同样的原因无法解析.
我尝试添加程序集作为参考,但在程序集引用的.NET选项卡中找不到它.
有什么想法吗?谢谢!
我看到这个代码使用LINQ to SQL,但是当我使用Entity Framework时,它会抛出此错误:
LINQ to Entities无法识别方法'System.Linq.IQueryable'1 [MyProject.Models.CommunityFeatures] GetCommunityFeatures()'方法,并且此方法无法转换为商店表达式.
存储库代码是这样的:
public IQueryable<Models.Estate> GetEstates()
{
return from e in entity.Estates
let AllCommFeat = GetCommunityFeatures()
let AllHomeFeat = GetHomeFeatures()
select new Models.Estate
{
EstateId = e.EstateId,
AllHomeFeatures = new LazyList<HomeFeatures>(AllHomeFeat),
AllCommunityFeatures = new LazyList<CommunityFeatures>(AllCommFeat)
};
}
public IQueryable<Models.CommunityFeatures> GetCommunityFeatures()
{
return from f in entity.CommunityFeatures
select new CommunityFeatures
{
Name = f.CommunityFeature1,
CommunityFeatureId = f.CommunityFeatureId
};
}
public IQueryable<Models.HomeFeatures> GetHomeFeatures()
{
return from f in entity.HomeFeatures
select new HomeFeatures()
{
Name = …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Silverlight ADO.Net数据服务客户端api(以及Linq To Entities)创建一个使用where子句中的id列表的查询.有没有人知道Contains不受支持的解决方法?
我想做这样的事情:
List<long?> txnIds = new List<long?>();
// Fill list
var q = from t in svc.OpenTransaction
where txnIds.Contains(t.OpenTransactionId)
select t;
Run Code Online (Sandbox Code Playgroud)
试过这个:
var q = from t in svc.OpenTransaction
where txnIds.Any<long>(tt => tt == t.OpenTransactionId)
select t;
Run Code Online (Sandbox Code Playgroud)
但得到"方法'任何'不受支持".
我们正在尝试在实体框架中为包含字符串字段的实体实现"LIKE"运算符,但似乎不支持它.有没有其他人试图做这样的事情?
这篇博客文章总结了我们遇到的问题.我们可以使用contains,但这只匹配LIKE的最简单的情况.组合contains,startswith,endswith和indexof将我们带到那里,但需要在标准通配符和Linq to Entities代码之间进行转换.
我有这个linq查询:
private void GetReceivedInvoiceTasks(User user, List<Task> tasks)
{
var areaIds = user.Areas.Select(x => x.AreaId).ToArray();
var taskList = from i in _db.Invoices
join a in _db.Areas on i.AreaId equals a.AreaId
where i.Status == InvoiceStatuses.Received && areaIds.Contains(a.AreaId)
select new Task {
LinkText = string.Format(Invoice {0} has been received from {1}, i.InvoiceNumber, i.Organisation.Name),
Link = Views.Edit
};
}
Run Code Online (Sandbox Code Playgroud)
它有问题.我正在尝试创建任务.对于每个新任务,当我将链接文本设置为像"Hello"这样的常量字符串时,它很好.但是上面我试图使用发票的属性来构建属性linktext.
我收到此错误:
base {System.SystemException} = {"LINQ to Entities无法识别方法'System.String Format(System.String,System.Object,System.Object)'方法,并且此方法无法转换为商店表达式." }
谁知道为什么?有人知道这样做的另一种方法是让它起作用吗?
有没有办法在LINQ或LINQ-to-Entities中批量删除与给定查询匹配的一堆对象?我能找到的唯一引用已经过时了,迭代并手动删除我想删除的所有对象似乎很愚蠢.
我需要将此SQL
语句翻译成Linq-Entity
查询...
SELECT name, count(name) FROM people
GROUP by name
Run Code Online (Sandbox Code Playgroud) linq-to-entities ×10
c# ×4
linq ×4
.net ×2
sql ×2
.net-3.5 ×1
count ×1
database ×1
entities ×1
exists ×1
group-by ×1
linq-to-sql ×1
sql-server ×1