Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq和重斑点_Linq - Fatal编程技术网

Linq和重斑点

Linq和重斑点,linq,Linq,我有这个文档表,其中包含文档的一些元数据,以及作为blob的文档内容 然后我使用lucene.Net查询我的文档;作为回报,它为我的文档表提供了一个guid列表,还提供了两个字段,其中包含突出显示的文档名的html版本和突出显示搜索关键字的extract 然后我使用linq将这个结果与我的文档表字段连接起来,以获得一个列表作为搜索结果显示。愚蠢的事情是linq试图将blob加载到文档中,尽管它没有在连接中使用 我想有两种选择,我都不喜欢: 将我的blob移动到新表并将其1-1链接到文档表。我不

我有这个文档表,其中包含文档的一些元数据,以及作为blob的文档内容

然后我使用lucene.Net查询我的文档;作为回报,它为我的文档表提供了一个guid列表,还提供了两个字段,其中包含突出显示的文档名的html版本和突出显示搜索关键字的extract

然后我使用linq将这个结果与我的文档表字段连接起来,以获得一个列表作为搜索结果显示。愚蠢的事情是linq试图将blob加载到文档中,尽管它没有在连接中使用

我想有两种选择,我都不喜欢:

  • 将我的blob移动到新表并将其1-1链接到文档表。我不喜欢它,因为linq的限制迫使我改变我的db结构
  • 添加一个包含“LiteDocument”表的新dbml,并从dbml中的document表中删除blob;我不喜欢它,因为如果文档表发生更改,我有两个地方需要维护
我想知道有没有更好的方法?以下是代码片段:

    public class LuceneSearchResult
    {
        public Guid DocumentID { get; set; }
        public string FormattedDocumentFileName { get; set; }
        public string FormattedDocumentExtract { get; set; }
    }


在数据库中创建一个排除blob的视图,然后从该视图生成dbml是否有帮助?它与第二个选项没有太大区别,但主要将更改保留在数据库本身,而不需要对现有表结构进行任何更改。

您可以指定延迟加载字段。它是DBML设计器中表字段可用的属性之一。

延迟加载字段是一种方法。我相信延迟加载字段的实际值只有在调用其属性访问器(例如myDoc.Blob)时才从数据库中获取。因此,只有在真正需要的时候才实际获取blob。
    public IList Search(string searchPhrase, Guid? ProductId)
    {
        searchPhrase = PrepareSearchPhraseWithThesaurus(searchPhrase);
        var result = RunLuceneQuery(searchPhrase, ProductId);

        var dc = new ChinaHcpDataContext();
        var docs =
                from r in result
                join d in dc.Documents on r.DocumentID equals d.DocumentID
                select
                        new
                                {
                                    d.DocumentID,
                                    TradeNameEN = d.TradeProduct != null ? d.TradeProduct.TradeNameEN : "",
                                    TradeNameZH = d.TradeProduct != null ? d.TradeProduct.TradeNameZH : "",
                                    d.DocumentFileName,
                                    d.InsertedDateUtc,
                                    d.Size,
                                    DocumentDisplayText = r.FormattedDocumentFileName,
                                    DocumentSelectionReason = r.FormattedDocumentExtract
                                };

        return docs.ToList();
    }