2011-05-20 87 views
3

我正在使用視圖來返回複雜的搜索查詢。當我使用linq查詢EF時,它返回同一行3次(實際的行數是正確的)。LINQ to Entities not returns expected result

使用LinqPad我已經對我的ef實體和實際的數據庫視圖運行相同的linq。

ReadmitPatientList 
    .AsQueryable() 
    .Where("PatientLastName.StartsWith(\"cooper\")") 
    .OrderBy (rpl => rpl.PatientLastName) 
    .Dump(); 

這就是我正在使用的linq。

linqpad顯示lambda作爲這樣的: EF:

ReadmitPatientList.MergeAs (AppendOnly) 
    .Where (=> .PatientLastName.StartsWith ("cooper")) 
    .OrderBy (rpl => rpl.PatientLastName) 

DB

ReadmitPatientList 
    .Where (=> .PatientLastName.StartsWith ("cooper")) 
    .OrderBy (rpl => rpl.PatientLastName) 

我不能發佈的結果...但EF返回相同記錄的三行。數據庫返回3行個人記錄。正如我的SQL查詢。

那麼我需要更改EF LINQ以使其正常工作嗎?


由如果SQL Explorer中運行的EF Linq查詢實際上返回正確的結果生成的SQL代碼。

+0

我不知道我明白。 rowcount與3或1一樣是否正確?你可以試試.Where(「it.PatientLastName LIKE'cooper%'」)。 – 2011-05-20 20:50:24

+0

rowcount應該是同一個人的3個唯一記錄。 (即三次不同的訪問),EF查詢將返回相同的記錄3次。直接db查詢返回正確 – ecathell 2011-05-20 22:23:06

+0

@ours我試過這種方式與同樣的結果再次EF,它不會對直數據庫工作。 – ecathell 2011-05-20 22:36:21

回答

4

如果Patient實體沒有主鍵或者推斷爲主鍵的列在結果集中的多個記錄中相同,則會發生這種情況。 EF使用內部身份映射,要求每個唯一標識的記錄必須重用實體的相同實例。因此,如果從數據庫中返回具有相同唯一標識的三條記錄,EF將返回三個代表結果集中第一條記錄的相同實例的枚舉(更多關於標識映射的信息請參見here)。 Linq-to-sql的DataContext中也有相同的行爲。

+0

GAH ...你知道嗎,我想我是爲了在ROWID字段中添加一個關鍵屬性...讓我嘗試一下,然後回覆你。 – ecathell 2011-05-21 15:59:28

+0

確定將關鍵屬性添加到R​​owID屬性不起作用。 RowID是一個GUID,所以它將是唯一的。我如何解決這個問題,因爲我使用的是一個視圖,即使是一個sproc也會遇到這個問題。 – ecathell 2011-05-21 16:15:23

+0

erm..just澄清我將密鑰添加到我的DomainService元數據文件。我不知道如何使linq使用,但我的應用程序在重新編譯後仍然顯示相同的行爲。 – ecathell 2011-05-21 16:16:29